home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / CRS / crs49.d81 / hack10a.sfx / issue10a
Text File  |  1990-02-12  |  82KB  |  2,009 lines

  1.                    ########
  2.              ##################
  3.          ######            ######
  4.       #####
  5.     #####  ####  ####      ##      #####   ####  ####  ####  ####  ####   #####
  6.   #####    ##    ##      ####    ##   ##   ##  ###     ##    ####  ##   ##   ##
  7.  #####    ########     ##  ##   ##        #####       ##    ## ## ##   ##
  8. #####    ##    ##    ########  ##   ##   ##  ###     ##    ##  ####   ##   ##
  9. #####  ####  ####  ####  ####  #####   ####  ####  ####  ####  ####   ######
  10. #####                                                                     ##
  11.  ######            ######            ╔SSUE #10
  12.    ##################              ╩UNE 30, 1995
  13.        ########
  14.  
  15. ----------------------------------------------------------------------(V1.1)--
  16. ┼DITOR'S ╬OTES
  17. BY ├RAIG ╘AYLOR
  18.  
  19. ╘HIS IS MY LAST ISSUE OF ├OMMODORE ╚ACKING (HAVING FINALLY GOTTEN OUT THE
  20. DOOR, BUT ╔ COULDN'T BREAK TRADITION AND GET IT OUT ON TIME :-) ). ╔'M HAVING
  21. TO GIVE IT UP BECAUSE ╔'VE GRADUALLY LOST INTEREST IN ├OMMODORE COMPUTERS OVER
  22. THE YEARS AND WITH THE SEARCH FOR A JOB (ANYONE WANNA HIRE A CSC GRADUATE?)
  23. AND AS ╔ GET OLDER ╔ SEEM TO HAVE LESS AND LESS TIME.
  24.  
  25. ╔'M GONNA BE HANDING THE REIGNS OF ├OMMODORE ╚ACKING OVER TO ╩IM ┬RAIN, WHO IS
  26. A VERY ACTIVE MEMBER OF THE ├OMMODORE ╔NTERNET COMMUNITY. ╚E WILL ALSO BE
  27. RUNNING A MAILSERVER THAT WILL TAKE THE PLACE OF MINE (═INE WILL BECOME
  28. UNAVAILABLE AFTER ╩ULY 1ST AND WILL SEND POINTERS TO ╩IM ┬RAIN'S MAILSERVER).
  29.  
  30. ╔T'S BEEN INTERESTING TO WATCH THE ├OMMODORE COMPUTERS EVOLVE, TAKE OFF LIKE A
  31. ROCKET AND THEN HAVE ├OMMODORE GO INTO LIQUIDATION. ├OMMODORE COMPUTERS HAVE
  32. BEEN AND STILL ARE, (WITH SOME EXCEPTIONS - 1541 HEAD-BANGING COMES TO MIND),
  33. TECHNOLOGICALLY SOUND.  ╞OR A "HACKING" MACHINE THEY'RE WONDERFUL.
  34.  
  35. ═Y EMAIL ADDRESS HAS CHANGED TO DUCK@NANDO.NET. ╔ PERIODICALLY STILL CHECK
  36. MAIL AT DUCK@PEMBVAX1.PEMBROKE.EDU BUT ONLY EVERY 2 WEEKS OR SO. ╔ AM STILL
  37. GOING TO TRY TO BE IN THE ├OMMODORE COMMUNITY BUT TIME WILL GOVERN MY ABILITY
  38. TO DO THAT. ╔'M GOING TO MISS EDITING THIS RAG....
  39.  
  40. ┴ND HERE IS ╩IM ┬RAIN: 
  41.  
  42. ═AIL ╙ERVER ├HANGES:
  43.  
  44. ╫ITH ╔SSUE 10, THE ADDRESS FOR THE ├OMMODORE ╚ACKING MAIL SERVER HAS CHANGED.
  45. ╘HE NEW ADDRESS IS BRAIN@MAIL.MSEN.COM  ╘HE COMMANDS ARE THE SAME AS BEFORE.
  46. ╬OT ALL OF THE FILES HAVE BEEN MOVED YET, SO PLEASE EMAIL THE ADMINISTRATOR
  47. (╩IM ┬RAIN, BRAIN@MAIL.MSEN.COM) IF A FILE YOU NEED IS NOT ON THE NEW SITE.
  48.  
  49. ╚OWDY:
  50. ╚OWDY, MY NAME IS ╩IM ┬RAIN, AND ╔ WILL BE TAKING OVER THE POSITION OF 
  51. EDITOR FOR ├OMMODORE ╚ACKING STARTING WITH ╔SSUE 11.  ╙OME OF YOU MAY KNOW
  52. ME AS THE ├OMMODORE ╘RIVIA ├ONTEST ADMINISTRATOR, THE ╒╙┼╬┼╘ NEWSGROUP
  53. COMP.SYS.CBM ╞┴╤ ═ANITAINER, OR THE KEEPER OF A ├OMMODORE ╔NFORMATION
  54. ╫╫╫ ╙ITE AT HTTP://WWW.MSEN.COM/▐BRAIN/CBMHOME.HTML.  ╫HEREVER YOU HAVE 
  55. HEARD OF ME FROM, OR EVEN IF YOU HAVEN'T, ╔ WILL STATE THAT ╔ PLAN ON
  56. HANDLING ├OMMODORE ╚ACKING IN THE FOLLOWING WAY.  ╘HE NEXT ISSUE WILL
  57. POSSIBLY LOOK DIFFERENT COSMETICALLY, AS ╔ EDIT SOMEWHAT DIFFERENTLY THAN
  58. ├RAIG, BUT THE CONTENT AND BASIC LAYOUT WILL REMAIN THE SAME.  ╘HE TYPES
  59. OF MATERIAL WILL NOT CHANGE, AND THE STRUCTURE FOR SUBMITTING ARTICLES WILL
  60. CHANGE ONLY IN THE ADDRESS TO MAIL THEM TO: BRAIN@MAIL.MSEN.COM.  ╚OWEVER,
  61. ╔ DO HAVE A FEW CHANGES IN MIND:
  62.  
  63. 1) ╘RY TO STABILIZE THE ISSUE GENERATION SO THAT ├OMMODORE ╚ACKING WILL
  64.    BECOME A QUARTERLY PUBLICATION.
  65.  
  66. 2) ┴TTEMPT A FULLY "╚╘═╠"IZED VERSION OF THE MAGAZINE, WHILE STILL PROVIDING A
  67.    TEXT VERSION. 
  68.    
  69. 3) ╨URSUE THE POSSIBILITY OF PROVIDING A PRINTED VERSION OF THESE ISSUES
  70.    FOR THOSE WHO HAVE NO ONLINE ACCESS TO THEM.
  71.    
  72. 4) ┼NCOURAGE ╒SER ╟ROUPS AND OTHER ├┬═ RELATED ORGANIZATIONS TO CARRY THIS
  73.    MAGAZINE FOR THEIR MEMBERS.
  74.    
  75. ╙O, AGAIN ╔ SAY HOWDY.  ┴S ALWAYS, ├OMMODORE ╚ACKING WILL ACCEPT YOUR 
  76. ARTICLES AT ANY TIME, SO PLEASE HELP US KEEP THIS QUALITY MAGAZINE RUNNING.
  77. ╔F YOU HAVE ANY QUESTIONS OR COMMENTS ABOUT THE CHANGE IN EDITORSHIP, THE
  78. POSSIBLE CHANGES, OR OTHER MATTERS, PLEASE FEEL FREE TO DROP ME A NOTE.
  79. ╔ LOOK FORWARD TO HEARING FROM YOU AND PUBLISHING YOUR ARTICLES.
  80.  
  81. ╩IM ┬RAIN
  82. BRAIN@MAIL.MSEN.COM
  83. ===========================================================================
  84. ╠EGAL ═UMBO-╩UMBO
  85.  
  86. ╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN WHOLE,
  87. FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL AUTHORS FOR
  88. PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPARATELY. ┴ CHARGE OF NO
  89. GREATER THAN 5 ╒╙ DOLLARS OR EQUIVLENT MAY BE CHARGED FOR LIBRARY SERVICE /
  90. DISKETTTE COSTS FOR THIS "NET-MAGAZINE".
  91.  
  92. -------------------------------------------------------------------------------
  93.  
  94. ╨LEASE NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS ╞╘╨
  95. FROM CCNGA.UWATERLOO.CA (AMONG OTHERS) UNDER /PUB/CBM/HACKING.MAG AND VIA A
  96. MAILSERVER WHICH DOCUMENTATION CAN BE OBTAINED BY SENDING MAIL TO
  97. "BRAIN@MAIL.MSEN.COM" WITH A SUBJECT LINE OF "MAILSERVER" AND THE
  98. LINES OF "HELP" AND "CATALOG" IN THE BODY OF THE MESSAGE.
  99.  
  100. -------------------------------------------------------------------------------
  101. ╔N ╘HIS ╔SSUE:
  102.  
  103. ├OMMODORE ╘RIVIA 
  104.  
  105. ╘RIVIA ┼DITION #13-18 ARE IN THIS ARTICLE.  ┴S YOU MAY KNOW, THESE QUESTIONS
  106. FORM PART OF A CONTEST IN WHICH THE MONTHLY WINNER GETS A PRIZE (╘HANKS TO MY
  107. VARIOUS PRIZE DONATORS). ╘HE WHOLE THING IS MAINLY JUST FOR FUN, SO PLEASE
  108. ENJOY.  ╘RY YOUR HAND AT ├OMMODORE TRIVIA!!
  109.  
  110. ┬╞╠╔ - ╬EW GRAPHICS MODES 2
  111.  
  112. ╞╠╔ GAVE US MORE COLOR TO THE SCREEN, ┴╞╠╔ INCREASED THE HORIZONTAL
  113. RESOLUTION AND COLOR SELECTION BY USING THE HIRES MODE.  ┬╞╠╔ STANDS
  114. FOR '┬IG ╞╠╔' AND GIVES US 400 LINES INSTEAD OF THE USUAL TWO
  115. HUNDRED.  ┴╞╠╔ AND ┬╞╠╔ CAN BE COMBINED, BUT WE ARE NOT GOING INTO
  116. THAT.
  117.  
  118. ═AKING STABLE RASTER ROUTINES (├64 AND ╓╔├-20)
  119.  
  120. ╔N THIS ARTICLE, ╔ DOCUMENT TWO METHODS OF CREATING STABLE RASTER
  121. ROUTINES ON ├OMMODORE COMPUTERS.  ╘HE PRINCIPLES APPLY FOR MOST 8-BIT
  122. COMPUTERS, NOT ONLY ├OMMODORES, BUT RASTER EFFECTS ARE VERY RARELY
  123. SEEN ON OTHER COMPUTERS.
  124.  
  125. ┴ ─IFFERANT ╨ERSPECTIVE - ╨ART ╔╔╔.
  126.  
  127. ┘ES!!!  ╔T'S YET ANOTHER ARTICLE ON 3─ GRAPHICS!  ┼VEN IF YOU
  128. HAVEN'T BEEN FOLLOWING THIS SERIES, YOU CAN USE THIS PROGRAM.  ╘HIS
  129. TIME AROUND WE WILL WRITE A COMPLETELY GENERAL POLYGON PLOTTER --
  130. IF YOU CAN TYPE BASIC DATA STATEMENTS, YOU CAN CREATE A THREE-DIMENSIONAL
  131. OBJECT OUT OF POLYGONS AND ROTATE AND PROJECT IT TO YOUR HEART'S CONTENT.
  132. ╞OR THE MORE TECHNICALLY INCLINED WE WILL LOOK AT OPTIMIZATIONS TO THE
  133. LINE ROUTINE, ┼╧╥-BUFFER FILLING, AND MORE!  ┘OW!
  134.  
  135. ╙ECOND ╙╔─ ├HIP ╔NSTALLATION
  136.  
  137. ╘HIS ARTICLE DESCRIBES HOW TO ADD A SECOND SID CHIP FOR USE IN ╙ID╨LAYER AND
  138. OTHER PROGRAMS. ┴S ALWAYS, BE EXTRA CAREFUL WHEN MAKING MODIFICATIONS TO YOUR
  139. COMPUTER.
  140.  
  141. ╙OLVING ╠ARGE ╙YSTEMS OF ╠INEAR ┼QUATIONS ON A ├64 ╫ITHOUT ═EMORY
  142.  
  143. ╧╦, NOW THAT ╔ HAVE YOUR ATTENTION, ╔ LIED.  ┘OU CAN'T SOLVE DENSE
  144. LINEAR SYSTEMS OF EQUATIONS BY DIRECT METHODS WITHOUT USING MEMORY TO
  145. STORE THE PROBLEM DATA.  ╚OWEVER, ╔'LL COME BACK TO THIS MEMORY FREE
  146. ASSERTION LATER.  ╘HE MAIN PURPOSE OF THIS ARTICLE IS TO RESCUE A
  147. USEFULL NUMERICAL ALGORITHM, "╤UARTERSOLVE", AND ALSO TO PROVIDE A BRIEF
  148. LOOK AT THE ├╧═┴╠ PROGRAMMING LANGUAGE AND ┬╠┴╙ ROUTINES.
  149.  
  150. ╘HE ╫ORLD OF ╔╥├ - ┴ ╬EW ╠IFE FOR THE ├64/128
  151.  
  152. ╔'VE HEARD PEOPLE TALKING ABOUT ╔╥├. ╫HAT IS IT? ╫HY IS IT USEFUL TO ME AS A
  153. ├OMMODORE USER? ┬ILL "├OOLHAND" ╠UECK EXPLAINS THE HOWS AND WHYS IN THIS 
  154. ARTICLE.
  155.  
  156. ╙WIFT╠INK-232 ┴PPLICATION ╬OTES (VERSION 1.0B)
  157.  
  158. ╘HIS INFORMATION IS MADE AVAILABLE FROM A PAPER DOCUMENT PUBLISHED BY ├═─,
  159. WITH ├═─'S PERMISSION. 
  160.  
  161. ─ESIGN AND ╔MPLEMENTATION OF A ╙IMPLE/┼FFICIENT ╒PLOAD/─OWNLOAD ╨ROTOCOL
  162.  
  163. ╘HIS ARTICLE DETAILS HOW TO IMPLEMENT A CUSTOM UPLOAD/DOWNLOAD PROTOCOL THAT
  164. IS FASTER THAN MOST OF THE ONES COMMON TO THE ├64/128 COMPUTERS.
  165.  
  166. ─ESIGN AND ╔MPLEMENTATION OF A '╥EAL' ╧PERATING ╙YSTEM FOR THE 128: ╨ART ╔╔
  167.  
  168. ╘HERE HAS BEEN A SLIGHT CHANGE IN PLANS.  ╔ ORIGINALLY INTENDED THIS 
  169. ARTICLE TO GIVE THE DESIGN OF A THEORETICAL DISTRIBUTED MULTITASKING 
  170. MICROKERNEL OPERATING SYSTEMFOR THE ├128.  ╔ HAVE DECIDED TO GO A 
  171. DIFFERENT ROUTE: TO TAKE OUT THE DISTRIBUTED COMPONENT FOR NOW AND IMPLEMENT
  172. A REAL MULTITASKING MICROKERNEL ╧╙ FOR A SINGLE MACHINE AND EXTEND THE SYSTEM
  173. TO BE DISTRIBUTED LATER.  ╘HE IMPLEMENTATION SO FAR IS, OF COURSE, ONLY IN 
  174. THE PROTOTYPE STAGE AND THE APPLICATION FOR IT IS ONLY A DEMO.  ╨ART ╔╔╔ OF 
  175. THIS SERIES WILL EXTEND THIS DEMO SYSTEM INTO, PERHAPS, A USABLE DISTRIBUTED
  176. OPERATING SYSTEM.
  177. ========================================================================
  178. ╘RIVIA
  179. BY ╩IM ┬RAIN (BRAIN@MAIL.MSEN.COM)
  180.  
  181. ╫ELL, SUMMER IS UPON THE ┬RAIN HOUSEHOLD, AND THINGS ARE MOVING AT A FAST
  182. CLIP AT THE HOUSE.  ╚OWEVER, THE TRIVIA STILL KEEPS COMING.  ╔ APPRECIATE
  183. ALL THE PEOPLE WHO CONTRIBUTE TO THE TRIVIA AND ALL THE PEOPLE WHO TAKE
  184. PART IN THE MONTHLY CONTEST.  ╔ HAVE COLLECTED ╘RIVIA ┼DITION #13-18 IN THIS
  185. ARTICLE.  ┴S YOU MAY KNOW, THESE QUESTIONS FORM PART OF A CONTEST IN WHICH
  186. THE MONTHLY WINNER GETS A PRIZE (╘HANKS TO MY VARIOUS PRIZE DONATORS).
  187. ╘HE WHOLE THING IS MAINLY JUST FOR FUN, SO PLEASE ENJOY.
  188.  
  189. ┴S THE SUMMER MONTHS START UP, NEWS ON THE TRIVIA INCLUDES:
  190.  
  191. 1) ╔ NOW HAVE ACCESS TO SOME MORE ORPHAN MACHINES (├65, ├116), SO EXPECT
  192.    SOME TRIVIA QUESTIONS ON THOSE MODELS.
  193.    
  194. 2) ╘HE NEW HOME NOW HAS A NUMBER OF MACHINES SET UP, SO TESTING ANSWERS TO
  195.    THE TRIVIA IS EVEN EASIER.  ╔ AM STILL TRYING TO GET THE OLD ╨┼╘ 
  196.    MACHINES IN HOUSE, BUT THE OTHERS ARE HERE.
  197.    
  198. 3) ╘HE ├OMMODORE ╫ORLD ╫IDE ╫EB ╨AGES (HTTP://WWW.MSEN.COM/▐BRAIN/CBMHOME.HTML)
  199.    THAT ╔ MAINTAIN AND PLACE THE TRIVIA ON CAUGHT THE EYE OF ╒╙┴ ╘ODAY AND
  200.    THE ╨HEONIX ╟AZETTE.  ╔ WAS INTERVIEWED FOR BOTH ARTICLES.  ╠OOK IN THE
  201.    ╩UNE 20TH EDITION OF ╒╙┴ ╘ODAY FOR THE SEGMENT, AND POSSIBLY A PICTURE OF
  202.    ╩IM ┬RAIN AND THE MACHINES HE USES TO CREATE THE TRIVIA.
  203.  
  204. ┴S ALWAYS, ╔ WELCOME ANY QUESTIONS (WITH ANSWERS), AND ENCOURAGE PEOPLE
  205. TO ENTER THEIR RESPONSES TO THE TRIVIA, NOW AT #18. 
  206.  
  207.  
  208. ╩IM.
  209.  
  210.  
  211. ╘HE FOLLOWING ARTICLE CONTAINS THE ANSWERS TO THE ─ECEMBER EDITION OF TRIVIA
  212. ($0├0 - $0├╞), THE QUESTIONS AND ANSWERS FOR ╩ANUARY ($0─0 - $0─╞), 
  213. ╞EBRUARY ($0┼0 - $0┼╞), ═ARCH ($0╞0 - $0╞╞), ┴PRIL ($100 - $10╞), AND THE
  214. QUESTIONS FOR THE ═AY EDITION ($110 - $11╞).  ┼NJOY THEM!
  215.  
  216.  
  217.    ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #13 FOR ─ECEMBER, 1994
  218.  
  219. ╤ $0├0) ╘HE EARLY 1541 DRIVES USED A MECHANISM DEVELOPED BY ______.  ╬AME
  220.         THE COMPANY.
  221.  
  222. ┴ $0├0) ┴LPS.
  223.  
  224. ╤ $0├1) ╧N LATER MODELS, ├OMMODORE SUBSEQUENTLY CHANGED MANUFACTURERS
  225.         FOR THE 1541 DRIVE MECHANISM.  ╬AME THE NEW MANUFACTURER.
  226.  
  227. ┴ $0├1) ╬EWTRONICS.
  228.  
  229. ╤ $0├2) ╫HAT IS THE MOST OBVIOUS DIFFERENCE(S).  (╧NLY ONE DIFFERENCE IS
  230.         NECESSARY)
  231.  
  232. ┴ $0├2) ┴LPS:        PUSH-TYPE LATCH, ROUND ╠┼─.
  233.         ╬EWTRONICS:  LEVER-TYPE LATCH, RECTANGULAR ╠┼─.
  234.                    
  235. ╤ $0├3) ╧N ├OMMODORE ┬┴╙╔├ ╓2.0, WHAT ANSWER DOES THE FOLLOWING GIVE:
  236.         ╨╥╔╬╘ (╙╤╥(9)=3)
  237.  
  238. ┴ $0├3) 0.  ┴CCORDING TO ├OMMODORE ┬┴╙╔├, THE ANSWER SHOULD BBY -1, WHICH
  239.         IS THE ┬┴╙╔├ VALUE OF ╘╥╒┼.  ╚OWEVER, THE ABOVE EQUATION IS ╬╧╘
  240.         TRUE.  ─OING ╨╥╔╬╘ ╙╤╥(9) YIELDS 3, BUT DOING ╨╥╔╬╘ (╙╤╥(9)-3)
  241.         YIELDS 9.31322575┼-10 (├64).  ╘HIS ANOMALY CAN BE ATTRIBUTED TO
  242.         ROUNDOFF ERRORS IN THE FLOATING POINT MATH ROUTINES IN ├OMMODORE ┬┴╙╔├.
  243.  
  244. ╤ $0├4) ╔N ├OMMODORE ┬┴╙╔├ (┴NY VERSION) WHAT DOES ┬ EQUAL AFTER THE FOLLOWING
  245.         RUNS: ├=0:┬=├=0 
  246.            
  247. ┴ $0├4) ┬ = -1.  ╘HE SECOND STATEMENT IS THE ONE TO LOOK AT.  ╘HE SECOND
  248.         EQUALS SIGN IS TREATED AS A COMPARISON, WHILE THE FIRST IS TREATED
  249.         AS A ASSIGNMENT.  ┬ GETS SET TO THE OUTCOME OF THE COMPARISON, WHICH
  250.         IS ╘╥╒┼ (-1).
  251.  
  252. ╤ $0├5) ╘HE FIRST ╨┼╘ CASSETTE DECKS WERE ACTUALLY _______ BRAND CASSETTE 
  253.         PLAYERS, MODIFIED FOR THE ╨┼╘ COMPUTERS.  ╬AME THE COMAPNY.
  254.  
  255. ┴ $0├5) ╙ANYO. ╙PECIFICALLY, ═ODEL ═1540┴.  ╫HAT A MODEL NUMBER!
  256.  
  257. ╤ $0├6) ╔N ├OMMODORE ┬┴╙╔├ (┴NY VERSION), WHAT HAPPENS IF THE FOLLOWING
  258.         PROGRAM IS RUN:
  259.         
  260.         10 ╩=0
  261.         20 ╔╞ ╩=0 ╟╧ ╘╧ 40
  262.         30 ╨╥╔╬╘ "╩<>0"
  263.         40 ╨╥╔╬╘ "╩=0"
  264.  
  265. ┴ $0├6) ╧N ┬┴╙╔├ 2.0 OR GREATER:
  266.    
  267.    ?╙┘╬╘┴╪  ┼╥╥╧╥ ╔╬ 20
  268.         ╥┼┴─┘.
  269.         
  270.         ╧N ┬┴╙╔├ 1.0:  (FOUND ON THE ╨┼╘ 2001 SERIES)
  271.         
  272.         ╩=0
  273.         ╥┼┴─┘.
  274.  
  275.         ┬┴╙╔├ 1.0 TOTALLY IGNORED SPACES, SO LINE 20 BECAME "╔╞╩=0╟╧╘╧40".
  276.         ╘HAT STATEMENT WOULD BE CORRECTLY PARSED, SICNE IT CONTAINS THE "╟╧╘╧"
  277.         KEYWORD.  
  278.         
  279.         ╚OWEVER, ON ┬┴╙╔├ 2.0 OR GREATER, SPACES WEREN'T IGNORED SO
  280.         COMPLETELY, AND THE "╘╧" IN "╟╧ ╘╧" WOULD BE TOKENIZED SEPARATELY, SO
  281.         SOME CODE WAS ADDED TO ┬┴╙╔├ TO CHECK TO "╟╧".  ┴S THE CODE THAT
  282.         ACCEPTS ╟╧╘╧ AS A SPECIAL CASE FOR ╘╚┼╬ AFTER AN ╔╞ STATEMENT WASN'T
  283.         PATCHED THIS WAY, THE ABOVE FAILS, BECAUSE ╟╧ IS NOT A VALID KEYWORD
  284.         AFTER ╔╞.  ╘HE STATEMENT ╙╚╧╒╠─ WORK CORRECTLY, BUT DOES NOT BECAUSE
  285.         OF THIS FAILURE TO FIX THE ╔╞ COMMAND PARSING.
  286.  
  287.         ╧N ┬┴╙╔├ 2.0 OR GREATER, SUBSTITUTING THE FOLLOWING LINE FOR LINE 20
  288.         WILL CAUSE THE PROGRAM TO WORK:
  289.  
  290.         20 ╔╞ ╩=0 ╘╚┼╬ ╟╧ ╘╧ 40
  291.  
  292. ╤ $0├7) ╔N QUESTION $068, WE LEARNED HOW ╩ACK ╘RAMIEL FIRST HAPPENED UPON THE
  293.         NAME "├╧══╧─╧╥┼".  ┴CCORDING TO THE STORY, THOUGH, IN WHAT COUNTRY
  294.         WAS HE IN WHEN HE FIRST SAW IT?
  295.  
  296. ┴ $0├7) ╟ERMANY.  
  297.  
  298. ╤ $0├8) ╧N THE ├OMMODORE USER PORT CONNECTOR, HOW MANY EDGE CONTACTS ARE
  299.         THERE?
  300.  
  301. ┴ $0├8) 24.  ╘WO ROWS OF 12 CONTACTS EACH.
  302.  
  303. ╤ $0├9) ╧N MOST ├OMMODORE COMPUTERS, A LOGICAL ┬┴╙╔├ SCREEN LINE CAN CONTAIN
  304.         UP TO 80 CHARACTERS.  ╧N WHAT ├OMMODORE COMPUTER(S) IS THIS NOT TRUE?
  305.  
  306. ┴ $0├9) ┴CCORDING TO ├OMMODORE DOCUMENTATION, A _PHYSICAL_ SCREEN LINE IS 
  307.         DEFINED AS ONE SCREEN LINE OF CHARACTERS.  ┴ _LOGICAL_ SCREEN LINE IS 
  308.         DEFINED AS HOW MANY _PHYSICAL_ LINES CAN BE CHAINED TOGETHER TO 
  309.         CREATE A VALID ┬┴╙╔├ PROGRAM LINE.  
  310.  
  311.         ╫ITH THAT IN MIND, MOST ├OMMODORE COMPUTERS CHOSE A _LOGICAL_
  312.         SCREEN LINE THAT WAS A MULTIPLE OF THE SCREEN WIDTH.  ╘HIS WORKS FINE
  313.         FOR 40 AND 80 COLUMN SCREENS, BUT WHAT DO WE DO WITH THE ╓╔├-20, WITH
  314.         ITS 22 COLUMN SCREEN.  ╙OLUTION:  MAKE THE _LOGICAL_ LINE LENGTH EQUAL
  315.         TO 4 _PHYSICAL_ LINES, OR 88 COLUMNS.
  316.  
  317.         ╫HEN THE ├OMMDORE 128 WAS INTRODUCED, THE NUMBER ROSE TO 160
  318.         CHARACTERS, WHICH IS 4 _PHYSICAL_ LINES IN 40 COLUMN MODE, OR
  319.         2 _PHYSICAL_ LINES IN 80 COLUMN MODE.  ╚OWEVER, YOU CAN ONLY TAKE
  320.         ADVANTAGE OF THIS IN 128 MODE.  64 MODE IS LIMITED TO 80 CHARACTERS.
  321.         
  322.         ╘O ADD TO ALL THIS CONFUSION, A VALID ┬┴╙╔├ PROGRAM LINE (IN MEMORY)
  323.         CAN ACTUALLY BE 255 (TOKENIZED) CHARACTERS LONG, BUT CREATING SUCH
  324.         A LONG LINE CANNOT BE DONE FROM THE BUILT-IN EDITOR IN DIRECT MODE.
  325.         
  326.         ╘HE ┴MIGA┬┴╙╔├, AVAILABLE ON THE ┴MIGA, ALSO DOES NOT HAVE THE 80
  327.         COLUMN LINE LIMIT.  ╚OWEVER, THAT ┬┴╙╔├ IS ╙╧╧╧ MUCH DIFFERENT THAT
  328.         ╔ AM NOT SURPRISED.  ╘HE OLDER ├┬═ ┬┴╙╔├S, ON THE OTHER HAND, WERE
  329.         ALL DERIVATIVES OF THE ORIGINAL ╠EVEL 1 ┬┴╙╔├ FOR THE ╨┼╘.
  330.  
  331. ╤ $0├┴) ╔F A FILE IS SAVED TO A ├OMMODORE ─ISK ─RIVE WITH THE FOLLOWING
  332.         CHARACTERS: CHR$(65);CHR$(160);CHR$(66), WHAT WILL THE DIRECTORY
  333.         ENTRY LOOK LIKE?
  334.  
  335. ┴ $0├┴) ╘HE FILENAME WILL SHOW UP AS "┴"┬, WITH THE '┬' SHOWING UP TO THE
  336.         RIGHT OF THE '"' MARK.  ╘HIS COULD BE USED TO MAKE PROGRAM LOADING
  337.         EASIER.  ┴ FILE THAT SHOWED UP AS "FILENAME",8,1 COULD BE LOADED
  338.         BY SIMPLY HITTING SHIFT-RUN/STOP ON THAT LINE.
  339.  
  340. ╤ $0├┬) ╫HAT IS THE MAXIMUM LENGTH (IN CHARACTERS) OF A ├┬═ DATASETTE
  341.         FILENAME?
  342.  
  343. ┴ $0├┬) ╥EFERENCES ╔ HAVE ON HAND SAY 128 CHARACTERS.  ╚OWEVER, THE ACTUAL
  344.         CODE ON THE 8032 AND THE ├64 ACTS AS THOUGH 187 CHARACTERS CAN
  345.         ACTUALLY BE SENT (TAPE BUFFER-5 CONTROL BYTES = 192-5=187).  ╘HE
  346.         REFERENCES THAT CLAIM 128 CHARACTERS ARE ╬ICK ╚AMPSHIRE'S
  347.         _╘HE ╓╔├ ╥EVEALED_ AND _╘HE ╨┼╘ ╥EVEALED_.  ┴╬YONE CARE TO LAY
  348.         THIS ONE TO REST? 
  349.  
  350. ╤ $0├├) ╚OW MANY KEYS ARE ON A STOCK ├OMMODORE 64 KEYBOARD?
  351.  
  352. ┴ $0├├) 66 KEYS.  ╘HIS IS THE SAME NUMBER AS FOUND ON THE ╓╔├-20 AND THE
  353.         ├OMMODORE 16.
  354.  
  355. ╤ $0├─) ├OMMODORE ┬┴╙╔├ USES KEYWORD "TOKENS" TO SAVE PROGRAM SPACE.  ╘OKEN
  356.         129 BECOMES "╞╧╥".  ╫HAT TWO TOKENS EXPAND TO INCLUDE A LEFT
  357.         PARENTHESIS AS WELL AS A ┬┴╙╔├ KEYWORD?
  358.  
  359. ┴ $0├─) ╘┴┬( (163) AND ╙╨├( (166).
  360.  
  361. ╤ $0├┼) ╘HERE ARE 6 WIRES IN THE ├OMMODORE SERIAL BUS.  ╬AME THE 6 WIRES.
  362.  
  363. ┴ $0├┼) 1) ╙ERIAL /╙╥╤╔╬
  364.         2) ╟╬─
  365.         3) ╙ERIAL ┴╘╬ ╔╬/╧╒╘
  366.         4) ╙ERIAL ├╠╦ ╔╬/╧╒╘
  367.         5) ╙ERIAL ─┴╘┴ ╔╬/╧╒╘
  368.         6) /╥┼╙┼╘
  369.  
  370. ╤ $0├╞) ╧N THE ├OMMODORE DATASETTE CONNECTOR, HOW MANY LOGICAL CONNECTIONS ARE
  371.         THERE?
  372.  
  373. ┴ $0├╞) 6. ╧PPOSING PINS ON THE CONNECTOR ARE HOOKED TOGETHER ELECTRICALLY.
  374.  
  375.  
  376.    ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #14 FOR ╩ANUARY, 1995
  377.  
  378. ╤ $0─0) ╚OW MANY KEYS WERE THERE ON THE "ORIGINAL" ╨┼╘ AND WHAT WAS SPECIAL
  379.         ABOUT THEM?
  380.  
  381. ┴ $0─0) THE ORIGINAL ╨┼╘ HAD 73 CALCULATOR-STYLE KEYS THAT WERE LAID OUT
  382.         IN A RECTANGULAR MATRIX, NOT TYPEWRITER-STYLE.
  383.  
  384. ╤ $0─1) ╚OW DO YOU PRODUCE THE "HIDDEN" MESSAGE(S) ON THE ├OMMODORE 128?
  385.  
  386. ┴ $0─1) ╙┘╙ 32800,123,45,6.  ╘HE SCREEN WILL CLEAR, AND THE SOFTWARE
  387.         AND HARDWARE DEVELOPERS ON THE 128 PROJECT WILL BE NAMED.
  388.  
  389.         ╘HE EXACT TEXT IS AS FOLLOWS:
  390.                 
  391. [╥╓╙]   ┬ROUGHT TO YOU BY...
  392.  
  393. ╙OFTWARE:
  394.  ╞RED ┬OWEN
  395.  ╘ERRY ╥YAN
  396.  ╓ON ┼RTWINE
  397.  
  398. ╚ERDWARE:
  399.  ┬IL ╚ERD
  400.  ─AVE ╚AYNIE
  401.  ╞RANK ╨ALAIA
  402.  
  403. [╥╓╙]╠INK ARMS,DON'T MAKE THEM.
  404.  
  405. ╤ $0─2) ╚OW MUCH MEMORY DID THE "ORIGINAL" ╨┼╘ SHOW ON BOOTUP?
  406.  
  407. ┴ $0─2) ╘HE "ORIGINAL" ╨┼╘ CAME IN TWO CONFIGURATIONS, 4╦ AND 8╦, SO:
  408.          
  409.           ╘HE ╨┼╘ 2001-4 HAD 3071 BYTES.
  410.           ╘HE ╨┼╘ 2001-8 HAD 7167 BYTES.
  411.  
  412. ╤ $0─3) ╫E ALL KNOW THE "REBOOT" SYS FOR THE 64 IS SYS 64738, BUT WHO KNOWS
  413.         THE SAME SYS LOCATION TO REBOOT THE ├┬═ 8032?
  414.  
  415. ┴ $0─3) SYS 64790
  416.  
  417. ╤ $0─4) ╫HICH COMPUTER(S) BEEPED AT BOOTUP?  (═AY BE MORE THAN ONE, BUT ONLY
  418.         ONE REQUIRED)
  419.            
  420. ┴ $0─4) ╔ KNOW SOME OF THESE ARE CORECT, BUT THE SHEER SIZE OF THE
  421.         LIST PREVENTS ME FROM CHECKING THEM ┴╠╠ OUT.
  422.         
  423.         ╞┴╘ 40╪╪ SERIES
  424.         80╪╪ SERIES
  425.         ╨├-10  (╔ SUSPECT A NUMBER OF ╔┬═ CLONES DID, AND THESE THINGS HAVE
  426.                 NO CONSISTENT NAMING CONVENTION ACROSS COUNTRY BOUNDARIES.)
  427.         ╨├-20
  428.         ┴MIGA 1000
  429.         ╙╨9000 (╙UPER╨┼╘)
  430.         
  431. ╤ $0─5) ╚OW MUCH MEMORY DID THE ├┬═ 8032 SHOW ON BOOTUP?
  432.  
  433. ┴ $0─5) 31743 BYTES.
  434.  
  435. ╤ $0─6) ├ERTAIN ├OMMODORE COMPUTERS PROVIDED EMTPY ┼╨╥╧═ SOCKETS ON THE
  436.         MOTHERBOARD.  ╟IVE ME THE NUMBER OF EMPTY SOCKETS ON THE FOLLOWING
  437.         MACHINES:
  438.  
  439.         A)  ├┬═ 30╪╪.
  440.         B)  ├┬═ 8╪╪╪.
  441.         C)  ├┬═ ├128.
  442.         D)  ╨LUS/4.
  443.  
  444. ┴ $0─6) A)  3 SOCKETS.
  445.         B)  2 SOCKETS.
  446.         C)  1 SOCKET.
  447.         D)  1 SOCKET.
  448.  
  449. ╤ $0─7) ╔N ╟ERMANY, THE ├┬═ 8032 CAME WITH A 4K┬ ┼╨╥╧═ FOR THE ┼╪╪╪ AREA,
  450.         WHILE THE ╒╙ VERSION ONLY HAD A 2K┬ ┼╨╥╧═.  ╫HY?
  451.  
  452. ┴ $0─7) ╘HE ╟ERMAN VERSION HAD ADDITIONAL KEYBAORD DRIVERS FOR UMLAUT
  453.         CHARACTERS AND DEAD KEYS.  
  454.  
  455. ╤ $0─8) ╫HO PUBLISHED THE FIRST ╨┼╘ MEMORY MAP IN THE "╨┼╘ ╟AZETTE"?
  456.  
  457. ┴ $0─8) ╬ONE OTHER THAN THE INFAMOUS ╩IM ┬UTTERFIELD.
  458.  
  459. ╤ $0─9) ╫HICH IS FASTER TO MOVE THE SURSOR ON A ╨┼╘/├┬═ OR ├64: ╙┘╙ OR 
  460.         ╨╥╔╬╘?
  461.  
  462. ┴ $0─9) ╨╥╔╬╘ IS FASTER, SINCE THE SYS APPROACH MUST PROCESS THE POKES
  463.         BEFORE THE SYS, WHICH ARE VERY SLOW.
  464.  
  465. ╤ $0─┴) ╧N THE ┴MIGA 1000, WHERE ARE THE SIGNATURES OF THE FIRST ┴MIGA
  466.         DEVELOPERS LOCATED?
  467.  
  468. ┴ $0─┴) ╔NSIDE THE TOP CASE OF THE ┴MIGA (1000).
  469.  
  470.         ╘HERE IS AN INTERESTING FOOTNOTE TO THIS QUESTION.  ╔T SEEMS
  471.         THAT AT LEAST SOME ORIGINAL ┴MIGA MACHINES WERE LABELED AS
  472.         ┴MIGA (WITH NU NUMBER).  ╘HEN, AT SOME LATER POINT, THE NUMBER WAS
  473.         ADDED.  ╔N ADDITION, ├OMMODORE PRODUCED SOME ┴MIGA 1000 MACHINES
  474.         WITHOUT THE SIGNATURES, BUT MOST HAD THE TELLTALE HANDWRITING ON
  475.         THE INSIDE OF THE CASE.  
  476.  
  477. ╤ $0─┬) ╧N THE 6502, WHAT DOES THE ACCUMULATOR CONTAIN AFTER THE FOLLOWING
  478.         IS EXECUTED:
  479.  
  480.         LDA #$AA
  481.         SED
  482.         ADC #01
  483.  
  484. ┴ $0─┬) ┴SSUME CARRY WAS CLEAR.  ╔F SO, THEN $11 IS THE CORRECT ANSWER. 
  485.  
  486. ╤ $0─├) ╫HAT IS THE MODEL NUMBER OF THE ╒╙ ╬╘╙├ ╓╔├-╔╔ CHIP?
  487.  
  488. ┴ $0─├) ╔TS FIRST NUMBER WAS 6567, AND THAT IS THE NUMBER MOST PEOPLE KNOW
  489.         IT BY, BUT ├OMMODORE PRODUCED A ╓╔├-╔╔ USING A NEW MANUFACTURING 
  490.         PROCESS THAT WAS NUMBERED THE 8562. 
  491.  
  492. ╤ $0──) ╫HAT IS THE ┼UROPEAN ╨┴╠ ╓╔├-╔╔ CHIP'S MODEL NUMBER?
  493.         (╬OT SURE IF THAT'S ITS RIGHTFUL TERM, BUT ╔ HOPE YOU UNDERSTAND).
  494.  
  495. ┴ $0──) ╙AME HERE.  ╘HE PART NUMBER 6569 IS THE MOST REMEMBERED NUMBER, BUT
  496.         AN 8565 WILL WORK AS WELL.
  497.  
  498. ╤ $0─┼) ┴SSUME YOU HAVE TWO COMPUTERS, ONE WITH EACH OF THE ABOVE CHIPS INSIDE.
  499.         ╫HICH CHIP DRAWS MORE PIXELS ON THE SCREEN PER SECOND?
  500.  
  501. ┴ $0─┼) ╬OTE, FOR THE PURPOSES OF THE CALCULATION ╔ AM PERFORMING, "PIXELS"
  502.         REFERS TO PICTURE ELEMENTS THAT CAN BE ADDDRESS AND MODIFIED USING
  503.         NORMAL ╓╔├ MODES, SO THERE ARE 320*200 "PIXELS" ON BOTH THE ╨┴╠
  504.         AND ╬╘╙├ SCREENS.  (╔ PROBABLY SHOULD HAVE STATED THIS, BUT IT IS
  505.         TOO LATE NOW.)  ┴LSO, THE SCREEN REFRESH RATES USED IN THE 
  506.         CALCULATIONS ARE THOSE DEFINED BY THE RESPECTIVE TELEVISION
  507.         STANDARDS (60╚Z ╒.╙., 50╚Z ┼UROPEAN), EVEN THOUGH THE ACTUAL
  508.         FREQUENCIES ARE OFF BY A SMALL PERCENTAGE. (FOR EXAMPLE, THE ACTUAL
  509.         50╚Z REFRESH RATE ON ┼UROPEAN ╓╔├-╔╔ CHIPS WAS CALCULATES AS 
  510.         50.124567╚Z BY ┴NDREAS ┬OOSE)
  511.         
  512.         ╙O, THE ╨┴╠ DRAWS 320*200*50 PIXELS PER SECOND = 3200000 PIXELS/S
  513.         ╬╘╙├ DRAWS 320*200*60 PIXELS PER SECOND = 3840000 PIXLES/S
  514.         
  515.         ╬OW, SOME PEOPLE THOUGHT ╔ MEANT THE WHOLE SCREEN, NOT JUST THE 
  516.         DISPLAY AREA PROVIDED BY THE ╓╔├-╔╔ CHIP.  ╫ELL, ╔ AM NOT SURE
  517.         EXACTLY YOU CALCULATE PIXELS ON A SCREEN, SINCE THE NUMBERS COULD
  518.         VARY FROM DISPLAY TO DISPLAY, BUT IF WE MEASURE IN SCANLINES:
  519.         
  520.         ╨┴╠ = 312 SCANLINES * 50 = 15600 SCANLINES/S
  521.         ╬╘╙├ = 262 SCANLINES * 60 = 15720 SCANLINES/S
  522.         
  523.         ╘HE ╬╘╙├ MACHINES WINS BOTH WAYS.  
  524.  
  525. ╤ $0─╞) ╔N ├OMMODORE ┬┴╙╔├, WHICH STATEMENT EXECUTES FASTER:
  526.  
  527.         A = 2--2
  528.  
  529.         OR
  530.  
  531.         A = 2+2
  532.  
  533. ┴ $0─╞) B IS THE CORRECT ANSWER, AND THERE ARE A COUPLE OF REASONS WHY:
  534.  
  535.         1) 2--2 TAKES LONGER TO PARSE IN THE ┬┴╙╔├ INTERPRETER.
  536.         2) ├OMMODORE ┬┴╙╔├ SUBTRACTS BY COMPLEMENTING THE SIGN OF THE
  537.            SECOND NUMBER AND ADDING.  ╘HIS INCURS EXTRA TIME.
  538.  
  539.         ╘HERE ARE EVEN MORE SUBTLE ONES, BUT ╔ LEAVE THEM AS AN
  540.         EXERCISE FOR THE READER.  ╙END ME YOUR REASON WHY.
  541.  
  542.  
  543.    ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #15 FOR ╞EBRUARY, 1995
  544.  
  545. ╤ $0┼0) ╫HAT IS THE DIFFERENCE(S) BETWEEN THE ╬EWTRONICS 1541 AND THE 1541├?
  546.         (ONLY ONE DIFFERENCE IS NEEDED)
  547.  
  548. ┴ $0┼0) (╟EORGE ╨AGE, A NOTED AUTHORITY ON ├┬═ ─RIVES, INDICATED THAT ├OMMODORE
  549.         MADE THIS A TOUGH QUESTION TO ANSWER.)  ┬Y THE TIME THE 1541├ WAS 
  550.         INTRODUCED, ├OMMODORE THREW A NUMBER OF DRIVES TOGETHER AND CALLED
  551.         THEM 1541├S.  ╘HE THEORETICAL 1541├ EXHIBITED THE FOLLOWING
  552.         FEATURES:
  553.  
  554.         ╬O HEAD BANGING, AND OTHER PROBLEMS FIXED BY MODIFIED ╥╧═S.
  555.         ├ASE COLOR MATCHES ├64├ AND ├128 COMPUTERS.
  556.  
  557. ╤ $0┼1) ╫HAT HAPPENS WHEN YOU TYPE 35072121 IN DIRECT MODE ON THE ├64 AND
  558.         HIT RETURN?
  559.  
  560. ┴ $0┼1) ╙IMPLE ANSWER:  ═OST LIKELY, THE SCREEN CLEARS AND THE WORD ╥┼┴─┘.
  561.         IS PRINTED AT SCREEN TOP.  ╘HIS IS THE BEHAVIOR SEEN WHEN PRESSING 
  562.         ╥╒╬-╙╘╧╨/╥┼╙╘╧╥┼.  ┴LTERNATELY, NOTHING COULD HAPPEN, OR THE COMPUTER
  563.         COULD LOCK UP.
  564.  
  565.         ╔NVOLVED ANSWER:  ╘HERE IS A BUG IN ┬┴╙╔├ 2.0.  ┼ASILY FIXED, BUT 
  566.         DESTINED TO LIVE LIFE IMMORTAL.  (LONG)
  567.  
  568.         ╘HE BUG IS IN THE ╨┼╘╙├╔╔ NUMBER TO BINARY CONVERSION ROUTINE AT
  569.         $A69B (╠╔╬╟┼╘).  ╘HE ROUTINE BASICALLY READS IN A CHARACTER FROM THE
  570.         LINE, MULTIPLIES A PARTIAL RESULT BY 10 AND ADDS THE NEW CHARACTER
  571.         TO THE PARTIAL RESULT.  ╚ERE IS A CODE SNIPPET:
  572.  
  573.         A96A     RTS
  574.         A96B     LDX #$00  ; ZERO OUT PARTIAL RESULT
  575.         A96D     STX $14
  576.         A96F     STX $15
  577.         A971     BCS $A96A ; NOT A NUMBER, RETURN
  578.         A973     SBC #$2F  ; ╨┼╘╙├╔╔ TO BINARY
  579.         A975     STA $07   
  580.         A977     LDA $15   ; GET HI BYTE OR PARTIAL RESULT
  581.         A979     STA $22
  582.         A97B     CMP #$19  ; PARTIAL > 6399
  583.         A97D     BCS $A953 ; YES, GOTO ERROR
  584.         A97F     LDA $14   ; LOAD LO BYTE OF RESULT
  585.         A981     ASL       ; LO*2
  586.         A982     ROL $22   ; HI*2 + C
  587.         A984     ASL       ; LO*2
  588.         A985     ROL $22   ; HI*2 + C
  589.         A987     ADC $14   ; COMPLETE LO*5
  590.         A989     STA $14
  591.         A98B     LDA $22  
  592.         A98D     ADC $15   ; COMPLETE HI*5
  593.         A98F     STA $15
  594.         A991     ASL $14   ; LO*2 COMPLETE LO*10
  595.         A993     ROL $15   ; HI*2 COMPLETE HI*10
  596.         A995     LDA $14
  597.         A997     ADC $07   ; ADD NEW CHAR
  598.         A999     STA $14
  599.         A99B     BCC $A99F ; DID LO OVERFLOW?
  600.         A99D     INC $15   ; YES, INC HI
  601.         A99F     JSR $0073 ; GET NEXT CHAR
  602.         A9A2     JMP $A971 ; GO THROUGH IT AGAIN.
  603.         
  604.         ╘HE PROBLEM IS AT $A97D.  WHEN THE PARTIAL RESULT IS GREATER THAN 6399,
  605.         (IF PARTIAL > 6399, THEN NEW PARTIAL RESULT WILL BE OVER 63999)
  606.         THE ROUTINE NEEDS TO GET TO $AF08 TO PRINT AN ERROR, BUT CAN'T DUE TO
  607.         BRANCH RESTRICTIONS.  ╚OWEVER, A BRANCH THAT WILL GET THERE IS IN THE
  608.         PRECEDING FUNCTION, WHICH HANDLES THE ╧╬ ╟╧╘╧/╟╧╙╒┬ KEYWORDS ($A94B,
  609.         ╧╬╟╧╘╧).  
  610.  
  611.         ╙O, THE ┬┴╙╔├ WRITERS JUST BRANCHED TO THE CODE IN ╧╬╟╧╘╧; SPECIFICALLY
  612.         $A953:
  613.         
  614.         A94B     JSR $B79E
  615.         A94E     PHA
  616.         A94F     CMP #$8D  ; IS THE KEYWORD ╟╧╙╒┬ ($8D)
  617.         A951     BEQ $A957 ; YES
  618.         A953     CMP #$89  ; IS THE KEYWORD ╟╧╘╧ ($89)
  619.         A955     BNE $A8E8 ; NO, PRINT ╙┘╬╘┴╪ ┼╥╥╧╥.
  620.         A957     ...       ; HANDLE ╧╬ ╟╧╘╧/╟╧╙╒┬
  621.  
  622.         ╘HIS CODE IS CHECKING TO MAKE SURE THE ╧╬ (VAR) IS FOLLOWED WITH A
  623.         ╟╧╘╧ OR ╟╧╙╒┬ KEYWORD.
  624.  
  625.         ╘HE ╠╔╬╟┼╘ ERROR HANDLER BRANCHES TO $A953, WHICH COMPARES
  626.         .┴ (WHICH HOLDS HI BYTE OF PARTIAL RESULT) TO $89.  ╬ORMALLY, THIS
  627.         FAILS, AND THE NORMAL ╙┘╬╘┴╪ ┼╥╥╧╥ CODE IS REACHED THROUGH THE BRANCH
  628.         TO $A8E8.  ╚OWEVER, FOR PARTIAL RESULTS OF THE FORM $89╪╪, THE CHECK
  629.         SUCCEEDS, AND ┬┴╙╔├ TRIES TO EXECUTE AN ╧╬ ╟╧╘╧/╟╧╙╒┬ CALL.
  630.  
  631.         ┬Y THE WAY, IT IS NO COINCIDENCE THAT THIS ERROR OCCURS ON 35072121,
  632.         SINCE ONE OF THE PARTIAL RESULTS IS $8900 (HI BYTE IS $89). ╔N FACT,
  633.         350721 WILL ACHIEVE THE SAME RESULT.
  634.  
  635.         ╔F THE CHECK SUCCEEDS, THE CODE LIMPS ALONG UNTIL $A96A:
  636.  
  637.         A969     PLA       ; COMPLEMENT TO $A94E
  638.         A96A     RTS       ; RETURN
  639.  
  640.         ┬UT WE NEVER EXECUTED $A94E, THE PUSH, SO THE STACK IS NOW
  641.         MESSED UP.  ╙INCE THE STACK HELD $9E, $79, $A5 BEFORE THE ╨╠┴,
  642.         (╘HE STACK COULD HOLD OTHER VALUES, BUT ╔ ALWAYS SAW THESE)
  643.         THE ╥╘╙ GETS ADDRESS $A579 TO RETURN TO, WHICH USUALLY HOLDS A ┬╥╦
  644.         OPCODE.  ╘HE BREAK HANDLER IS INVOKED, AND THE SCREEN CLEARS WITH THE
  645.         ╥┼┴─┘. AT THE TOP.
  646.  
  647.         ╬OW, THE ┬┴╙╔├ 2.0 AUTHORS WERE JUSTIFIED IN REUSING THE ERROR
  648.         HANDLER CODE IN ╧╬╟╧╘╧ FOR ╠╔╬╟┼╘, BUT THEY CALCULATED THE BRANCH
  649.         OFFSET WRONG, ACCORDING TO MY TESTS.  ╔F YOU HAVE THE ╠╔╬╟┼╘ ERROR
  650.         HANDLER BRANCH TO $A955, ALL THESE TROUBLES DISAPPEAR.  ┘OU CAN
  651.         VERIFY THIS PROCEDURE WITH THE FOLLOWING ┬┴╙╔├ PROGRAM ON A 64:
  652.         
  653.         10 FOR T=57344 TO 65535:POKE T,PEEK(T):NEXT
  654.         20 FOR T=40960 TO 49151:POKE T,PEEK(T):NEXT
  655.         30 POKE 43390, 214
  656.         40 POKE 1, PEEK(1) AND 254
  657.  
  658.         ╩UST TO BE COMPLETE, THIS ERROR OCCURS WHEN A 6 DIGIT OR GREATER LINE
  659.         NUMBER IS ENTERED AND THE FIRST 6 DIGITS INDICATE A NUMBER IN THE
  660.         RANGE 35072-35327 ($8900-$89FF).  ┴LSO, IT APPEARS THE ERROR OCCURS
  661.         ON THE ╓╔├-20, BUT ╔ DIDN'T COMPLETELY VERIFY IT.  ╔T WOULD BE
  662.         INTERESTING TO NOTE IF THE ERROR IS FOUND ON ALL VERSION OF ├┬═ ┬┴╙╔├.
  663.  
  664.         ╫HEW, WHAT A MOUTHFUL.
  665.  
  666. ╤ $0┼2) ╔F A ╙╔─ CHIP IS PRODUCING A "SAWTOOTH WAVEFORM", DOES THE WAVEFORM LOOK
  667.         LIKE: 
  668.  
  669.         A) "/▄/▄/▄/▄"  OR
  670.         B) "▄\▄\▄\▄\"  ?
  671.  
  672. ┴ $0┼2) A IS THE CORRECT ANSWER.
  673.  
  674. ╤ $0┼3) ╧N ┬┴╙╔├ 2.0, WHAT SPECIAL PRECAUTION(S) MUST ONE TAKE WHEN WORKING WITH
  675.         RELATIVE FILES? (ONLY ONE IS NEEDED)
  676.  
  677. ┴ $0┼3) ┬ECAUSE ┬┴╙╔├ 2.0 DOESN'T HANDLE POSITIONING IN RELATIVE FILES QUITE
  678.         RIGHT, ONE MUST POSITION THE RELATIVE FILE POINTER BEFORE ┴╬─ ┴╞╘┼╥
  679.         A READ OR WRITE TO A RELATIVE FILE.
  680.  
  681. ╤ $0┼4) ╫HAT INCOMPATIBILITY EXISTED BETWEEN ├128 ╥EV. 0 ╥╧═╙ AND THE ╥┼╒?
  682.            
  683. ┴ $0┼4) ╧╦, ╔ ADMIT IT.  ╔ PLACED THIS ANSWER AND ITS DISCUSSION SOMEWHERE
  684.         IN MY STORE OF INFORMATION, AND IT MUST HAVE FALLEN BEHIND THE 
  685.         CABINET, BECAUSE ╔ CANNOT FIND IT.  ╔ WILL POST AN ANSWER TO THIS
  686.         AS SOON AS ╔ CAN FIND IT, BUT THE ANSWERS REALLY MUST GO OUT, AS
  687.         THEY HAVE BEEN HELD UP LONG ENOUGH.
  688.  
  689. ╤ $0┼5) ╫HAT CAN TRIGGER AN ╬═╔ INTERRUPT? (COUNT ALL SOURCES ON ONE CHIP AS
  690.         ONE)
  691.  
  692. ┴ $0┼5) ╘HE FOLLOWING SOURCES CAN TRIGGER AN ╬═╔ INTERRUPT:
  693.  
  694.         1) ╘HE EXPANSION PORT.
  695.         2) ├╔┴ #2.
  696.         3) ╘HE ╥┼╙╘╧╥┼ KEY.
  697.  
  698. ╤ $0┼6) ╫HAT CAN TRIGGER AN ╔╥╤ INTERRUPT? (COUNT ALL SOURCES ON ONE CHIP AS
  699.         ONE)
  700.  
  701. ┴ $0┼6) ╘HE FOLLOWING SOURCES CAN TRIGGER AN ╔╥╤ INTERRUPT:
  702.  
  703.         1) ╘HE ╓╔├-╔╔ CHIP.
  704.         2) ├╔┴ #1.
  705.         3) ╘HE EXPANSION PORT.
  706.  
  707. ╤ $0┼7) ╫HERE IS THE ╥╧═ IN A 1541 LOCATED IN THE 64╦ MEMORY MAP?
  708.  
  709. ┴ $0┼7) ╘HE ╥╧═ IS LOCATED FROM $├000 TO $╞╞╞╞, YET THE ╥╧═ CODE DOES NOT
  710.         BEGIN UNTIL $├100.
  711.  
  712. ╤ $0┼8) ╫HICH ╓╔┴ ON THE 1541 IS HOOKED TO THE READ/WRITE HEAD?
  713.  
  714. ┴ $0┼8) ╓╔┴ #2, LOCATED IN MEMORY FROM $1├00 TO $1├0┼.
  715.  
  716. ╤ $0┼9) ╔N THE ├OMMODORE ─╧╙, WHAT BIT IN THE FILE TYPE BYTE DENOTES A "LOCKED"
  717.         FILE?
  718.  
  719. ┴ $0┼9) BIT 6.
  720.  
  721. ╤ $0┼┴) ╔F FILES ARE "LOCKED" UNDER ├OMMODORE ─╧╙, UNDER WHAT CONDITION(S) MAY
  722.         THE FILE BE CHANGED?
  723.  
  724. ┴ $0┼┴) ─EPENDING ON THE FILE, THE FOLLOWING OPERATIONS CAN BE DONE ON A 
  725.         LOCKED FILE:
  726.         
  727.         1) ╥ENAME WILL CHANGE FILE NAME, ALTHOUGH NOT CONTENTS OF FILE.
  728.         2) ╥ANDOM ACCESS CAN BE USED TO ALTER FILE.
  729.         3) ╞ORMATTING THE DISK WILL ALTER THE FILE. (DUH!)
  730.         4) ╙AVE-WITH-REPLACE (@0:) WILL REPLACE FILE AND UNLOCK IT.
  731.         5) ╧PENING FILE IN APPEND MODE WILL ALLOW IT TO BE CHANGED, AND
  732.            UNLOCK IT.
  733.         6) ╧PENING A RELATIVE FILE AND ADDING OR CHANGING A RECORD WILL
  734.            SUCCEED AND UNLOCK FILE.
  735.  
  736. ╤ $0┼┬) ╚OW BIG CAN A PROGRAM FILE BE ON A 1541 OR SIMILAR?
  737.  
  738. ┴ $0┼┬) ╘HE FILE CAN BE AS LARGE AS A SEQUENTIAL FILE, SINCE BOTH ARE STORED
  739.         IN THE SAME WAY: 168656 BYTES.  ╚OWEVER, SINCE A PROGRAM CONTAINS ITS
  740.         LOAD ADDRESS AS BYTES 0 AND 1, THE LARGEST PROGRAM SIZE IS 168654
  741.         BYTES.
  742.  
  743. ╤ $0┼├) ╒NDER ┬┴╙╔├ 2.0, HOW DOES ONE OPEN A RANDOM ACCESS FILE ON A DISK
  744.         DRIVE?
  745.  
  746. ┴ $0┼├) ╥ANDOM ACCESS (OR DIRECT ACCESS) FILES ARE A MISNOMER.  ╫HAT YOU
  747.         REALLY DOING IS OPENING THE DISK FOR READING AND WRITING.  ┘OU NEED
  748.         TWO OPEN COMMAND TO ACCESS A RANDOM FILE: (ASSUME DRIVE 8)
  749.         
  750.         OPEN 15,8,15     AND
  751.         
  752.         OPEN 1,8,4,"#1" WILL OPEN A RANDOM ACCESS FILE USING BUFFER 1.
  753.         OPEN 1,8,4,"#" WILL OPEN A RANDOM ACCESS FILE USING THE FIRST
  754.         AVAILABLE BUFFER
  755.         
  756.         ╬OW, BY USING ┬-╥, ┬-╫, ┬-┴ OR THEIR REPLACEMENTS, YOU CAN WRITE
  757.         DATA TO SECTORS ON THE DISK.
  758.         
  759.         ╬OTE THAT ╥ANDOM ACCESS FILES ARE DIFFERENT FROM RELATIVE FILES.
  760.         
  761. ╤ $0┼─) ┴ FILE THAT HAS A '*' IMMEDIATELY BEFORE THE FILETYPE IS CALLED
  762.         A _________ FILE.
  763.  
  764. ┴ $0┼─) A SPLAT FILE.  ╘HIS IS ITS CORRECT TERM, BELIEVE IT OR NOT.
  765.  
  766. ╤ $0┼┼) ╫E KNOW THE 1541 AND SIMILAR DRIVES HAVE 5 INTERNAL BUFFER AREAS, BUT
  767.         HOW MANY DOES AN 8050 DRIVE HAVE?
  768.  
  769. ┴ $0┼┼) ╙INCE THE 8050 HAS TWICE THE ON-BOARD ╥┴═ (4K┬), IT HAS 16 BUFFERS, BUT
  770.         ONLY 13 ARE AVAILABLE.  (┴LL ├┬═ DRIVES USE ONE BUFFER FOR ZERO-PAGE
  771.         MEMORY, ONE FOR STACK MEMORY, AND ONE FOR TEMPORARY VARIABLES.) 
  772.  
  773. ╤ $0┼╞) ╧N A "SAVE-WITH-REPLACE", WHERE IS THE LOCATION OF THE FIRST TRACK AND
  774.         SECTOR OF THE NEW COPY OF THE PROGRAM SAVED IN THE DIRECTORY ENTRY FOR
  775.         THE OLD COPY?
  776.  
  777. ┴ $0┼╞) ╘HE NEW FIRST TRACK IS STORED AT LOCATION 26, AND THE NEW FIRST SECTOR
  778.         IS STORED AT LOCATION 27.  ╘HESE VALUES ARE COPIED TO THEIR
  779.         CORRECT LOCATIONS AFTER THE SAVE IS COMPLETED.
  780.  
  781.  
  782.    ╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #16 FOR ═ARCH, 1995
  783.  
  784. ╤ $0╞0) ╫HAT SIZE MATRIX OF PIXELS COMPRISES A CHARACTER ON A ╨┼╘ 2001
  785.         COMPUTER?
  786.  
  787. ┴ $0╞0) ╘HE MATRIX WAS 8 BY 8.  
  788.  
  789. ╤ $0╞1) ╚OW MANY BYTES DID THE OPENING SCREEN ON A ├┬═ 4016 SHOW AS
  790.         AVAILABLE FOR USE BY ┬┴╙╔├?
  791.  
  792. ┴ $0╞1) 15359 BYTES FREE.
  793.  
  794. ╤ $0╞2) ╘HE CHARACTER SET THAT PRODUCES UPPERCASE LETTERS ON UNSHIFTED KEYS 
  795.         IS THE ________________ CHARACTER SET.
  796.  
  797. ┴ $0╞2) "STANDARD MODE".  
  798.  
  799. ╤ $0╞3) ╘HE CHARACTER SET THAT PRODUCES LOWERCASE LETTERS ON UNSHIFTED KEYS
  800.         IS THE ________________ CHARACTER SET.
  801.  
  802. ┴ $0╞3) "ALTERNATE MODE"
  803.  
  804. ╤ $0╞4) ╘O GET TO THE SET MENTIONED IN $╞2, WHAT CHARACTER CODE WOULD BE
  805.         PRINTED TO THE SCREEN?
  806.  
  807. ┴ $0╞4) CHR$(142)
  808.  
  809. ╤ $0╞5) ╫HAT CHARACTER CODE WOULD ONE PRINT TO THE SCREEN TO INVOKE THE 
  810.         CHARARACTER SET IN $╞3?
  811.  
  812. ┴ $0╞5) CHR$(14)
  813.  
  814. ╤ $0╞6) ╔F ONE DOES ╠╔╙╘ 60-100, WILL LINE 100 GET "LISTED"?
  815.  
  816. ┴ $0╞6) ┘ES.  ╘HE ABOVE TRANSLATES AS: ╠╔╙╘ 60 THROUGH TO AND INCLUDING 100.
  817.  
  818. ╤ $0╞7) ╘HE ABBREVIATION FOR THE ┬┴╙╔├ 4.0 COMMAND "├╧╠╠┼├╘" IS ________.
  819.  
  820. ┴ $0╞7) CO╠. "├" "╧" "╙╚╔╞╘-╠".  ╞OR THOSE WHO ARE INTERESTED, THE 
  821.         ├╧╠╠┼├╘ COMMAND IS ANALOGOUS TO THE ╓┴╠╔─┴╘┼ OPERATION.
  822.  
  823. ╤ $0╞8) ╫HEN YOU USE A SUBSCRIPTED VARIABLE IN ┬┴╙╔├, HOW MANY ELEMENTS
  824.         ARE CREATED BY DEFAULT IF NO ─╔═ STATEMENT IS ISSUED?
  825.  
  826. ┴ $0╞8) 11 ELEMENTS.  ┴(0) - ┴(10).  ┴LMOST EVERYONE WHO HAS EVER PROGRAMMED 
  827.         IN ├OMMODORE ┬┴╙╔├ HAS SEEN THE "┬┴─ ╙╒┬╙├╥╔╨╘" ERROR WHEN THEY TRY 
  828.         TO USE THE 12TH ELEMENT IN A UN-─╔═ENSIONED ARRAY.
  829.  
  830. ╤ $0╞9) ╚OW LARGE IS THE KEYBOARD BUFFER IN ├┬═ COMPUTERS?
  831.  
  832. ┴ $0╞9) 10 BYTES.  ╙INCE THIS AREA COULD BE ╨╧╦┼D TO, MANY BOOT PROGRAMS
  833.         WOULD POKE CHARACTERS INTO THIS BUFFER TO SIMULATE KEYPRESSES.
  834.  
  835. ╤ $0╞┴) ╧N THE ├OMMODORE 1581, HOW LARGE IS A PHYSICAL SECTOR IN BYTES?
  836.  
  837. ┴ $0╞┴) ┴ PHYSICAL SECTOR IS 512 BYTES IN LENGTH.  ╔NTERNALLY, THE 1581
  838.         CREATES 2 256 "LOGICAL" SECTORS IN A PHYSICAL SECTOR, TO MAINTAIN
  839.         COMPATIBILITY WITH OLDER ├OMMODORE DRIVES.
  840.  
  841. ╤ $0╞┬) ┘OU'LL FIND ┬┴╙╔├ 3.5 ON THE _____________ LINE OF ├┬═ COMPUTERS.
  842.  
  843. ┴ $0╞┬) ╘HE ╪64 SERIES.  ╘HAT INCLUDES THE ├OMMODORE 16, THE ├OMMODORE 116,
  844.         AND THE ├OMMODORE ╨LUS/4.
  845.  
  846. ╤ $0╞├) ╧N THE ├OMMODORE 1351 MOUSE, WHAT REGISTERS IN THE ├OMMODORE
  847.         COMPUTER WOULD THE ╪ AND ┘ PROPORTIONAL INFORMATION BE READ
  848.         FROM?
  849.  
  850. ┴ $0╞├) ┼VEN THOUGH YOU ARE LOOKING FOR DIGITAL INFORMATION (HOW FAR THE
  851.         MOUSE HAS TRAVELED SINCE THE LAST MOVEMENT IN A PARTICULAR AXIS), 
  852.         THE INFORMATION IS READ FROM THE "PADDLE" OR POTENTIOMETER (╨╧╘)
  853.         REGISTERS.  ╧N THE ├64, THE ╨╧╘ REGISTERS ARE PART OF THE ╙╔─
  854.         CHIP, AND ARE AT 54297 ($─419) FOR ╨╧╘╪, AND 54298 ($─41┴) FOR
  855.         ╨╧╘┘.
  856.  
  857. ╤ $0╞─) ╫HAT IS THE MAXIMUM SIZE OF A SEQUENTIAL FILE ON A 1581 DRIVE?
  858.  
  859. ┴ $0╞─) 802640 BYTES.
  860.  
  861. ╤ $0╞┼) ╫HAT FLAW EXISTS IN THE EARLY ├OMMODORE 1670 MODEMS?
  862.  
  863. ┴ $0╞┼) ╫HEN THE 1670 MODEM WAS FIRST INTRODUCED, IT POWERED UP IN AUTO-
  864.         ANSWER MODE, WHICH MEANS IT WOULD ANSWER INCOMING CALLS AFTER
  865.         THE PHONG RANG.  ┘OU COULD TURN THIS FEATURE OFF THROUGH SOFTWARE
  866.         CONTROL, BUT IF THE POWER WAS RESET, THE MODEM WOULD ANSWER THE
  867.         PHONE.  ╙O MANY PEOPLE COMPLAINED TO ├OMMODORE THAT ├┬═ REVISED
  868.         THE 1670 TO INCLUDE AN EXTRA ─╔╨ SWITCH THAT TURNED THIS FEATURE
  869.         OFF.
  870.  
  871. ╤ $0╞╞) ╫HAT IS THE MODEL NUMBER OF THE FIRST MODEM FOR THE ╓╔├ AND ├64?
  872.  
  873. ┴ $0╞╞) ╘HE 1600 MANUAL DIAL/MANUAL ANSWER 0-300 BPS MODEM.  ╘HE AUTHOR 
  874.         OWNS ONE, AND USED IT FOR MANY YEARS.  ╘O OPERATE, YOU MUST USE
  875.         A PHONE WITH A DETACHABLE HANDSET CORD.  ┘OU DIALED THE NUMBER
  876.         ON THE PHONE, WAITED FOR THE ANSWER, UNPLUGGED THE HANDSET, AND
  877.         PLUGGED THE CORD INTO THE 1600.  ┴ SWITCH TOGGLED BETWEEN USING
  878.         ORIGINATE OR ANSWER FREQUENCIES.  ╘HE 1600 WAS MANUFACTURED BY
  879.         ┴NCHOR ┴UTOMATION FOR ├OMMODORE.  (┴S AN ASIDE, THIS UNIT CLAIMED
  880.         300 BPS, BUT ╔ NEVER COULD GET 300 TO WORK WELL.  ═OST OF MY
  881.         TELECOMMUNICATIONS HAPPENED AT 150 BPS.)
  882.  
  883.  
  884. -------├OMMODORE ╘RIVIA ┼DITION #17 ╤UESTIONS AND ┴NSWERS (┬┼╟╔╬)--------
  885.  
  886. ╤ $100) ╧N THE ═╧╙ ╘ECHNOLOGY'S ╦╔═-1, HOW MANY KEYS WERE ON THE KEYPAD?
  887.  
  888. ┴ $100) 23 KEYS.  ╘HE KEYPAD HAS ROOM FOR 24, BUT ONE SPOT IS TAKEN BY
  889.         A SWITCH THAT PUTS THE SYSTEM INTO SINGLE-STEP MODE.  ╔NTERESTINGLY,
  890.         SOME PICTURES HAVE THE SWITCH ON THE UPPER LEFT, SOME ON THE UPPER
  891.         RIGHT.
  892.  
  893. ╤ $101) ╘HE ╦╔═-1 KEYPAD HAD THE COMMON 0-9┴-╞ KEYS ON THE KEYPAD, BUT
  894.         ALSO HAD SOME SPECIAL KEYS.  ╬AME THEM.
  895.  
  896. ┴ $101) ╟╧ (╟O) ┼XECUTES AN INSTRUCTION AND DISPLAYS THE ADDRESS OF NEXT,
  897.         ╙╘ (╙TOP) ╙TOPS EXECUTION OF PROGRAM AND RETURN CONTROL TO MONITOR, 
  898.         ╥╙ (╥ESET), 
  899.         ┴─ (┴DDRESS) ┴DDRESS ENTRY MODE, 
  900.         ─┴ (─ATA) ─ATA ENTRY MODE, 
  901.         ╨├ (╨ROGRAM ├OUNTER) ─ISPLAYS AND RESTORES PROGRAM COUNTER TO VALUES
  902.                              IN ╨├╠ AND ╨├╚,
  903.         +  (╔NCREMENT) ╔NCREMENTS THE ADDRESS WITHOUT CHANGING THE ENTRY MODE.
  904.  
  905. ╤ $102) ╘HE ╦╔═-1 WAS A SET OF MODULES THAT COULD BE PLUGGED TOGETHER TO
  906.         EXPAND THE SYSTEM.  ┼ACH MODULE HAD A MODEL NUMBER.  ╫HAT WAS THE 
  907.         MODEL NUMBER OF THE ╦╔═-1 MOTHERBOARD?
  908.  
  909. ┴ $102) ╘HE ╦╔═-4.  
  910.  
  911. ╤ $103) ╧N THE 1525 LINE OF PRINTERS, IF YOU WANTED TO CREATE THE FOLLOWING
  912.         GRAPHIC, WHAT BYTES WOULD YOU SEND TO THE PRINTER AFTER TURNING ON
  913.         GRAPHICS MODE?
  914.         
  915.         ****
  916.         *  *
  917.         *  *
  918.         *  *
  919.         *  *
  920.         *  *
  921.         ****
  922.  
  923. ┴ $103) ╔ GUESS ╔ SHOULD HAVE STIPULATED THAT THIS IS A BITMAP.  ┴╙├╔╔ JUST
  924.         HAS A FEW LIMITATIONS.  ┴NYWAY, THE CORRECT BYTES TO SEND ARE:
  925.         255, 193, 193, 255.  ┘OU GOT THESE BY ASSIGNING EACH BIT IN A COLUMN
  926.         A VALUE, AND ADDING 128 TO THE RESULT FOR EACH COLUMN.  
  927.  
  928. ╤ $104) ╫HAT IS THE HORIZONTAL RESOLUTION OF THE 1525 LINE OF PRINTERS?
  929.  
  930. ┴ $104) ├HARACTER RESOLUTION:   80 CHARS, OR 10 CHARS/INCH (CPI).
  931.         ╟RAPHICS RESOLUTION:    480 DOTS, OR 60 DOTS/INCH (DPI).  
  932.  
  933. ╤ $105) ╧N ├OMMODORE DRIVES, EXPLAIN THE DIFFERENCE BETWEEN THE ┬-╥ COMMAND
  934.         AND THE ╒1 COMMAND.
  935.  
  936. ┴ $105) ╘HE TWO COMMANDS READ IN DATA FROM A DISK SECTOR.  ╚OWEVER, THE 
  937.         ╒1 COMMAND ALWAYS READS A FULL SECTOR (255 BYTES).  ╘HE ┬-╥
  938.         COMMAND READS THE NUMBER OF BYTES SPECIFIED IN THE FIRST BYTE OF
  939.         THE SECTOR.  ╔F THE FIRST BYTE IS A 15, ┬-╥ WILL READ 15 BYTES
  940.         FROM THE SECTOR.  (╞ROM THE 1581 MANUAL)
  941.  
  942. ╤ $106) ╧N THE ├OMMODORE 1541 DRIVE, WHAT DOES THE ╒: COMMAND DO?
  943.  
  944. ┴ $106) ╘HIS COMMAND HAS BEEN TRADITIONALLY USED TO RESET ├OMMODORE DRIVES,
  945.         INCLUDING THE ├┬═ 1541.  ╚OWEVER, SOME EARLY VERSIONS OF THE ─RIVE
  946.         ─╧╙ DID NOT CORRECTLY HANDLE THIS COMMAND.  ╔N THESE VERSIONS, THE 
  947.         DRIVE AND COMPUTER FAILED TO COMPLETE THE COMMAND TRANSACTION 
  948.         SUCCESSFULLY, AND WHAT LOOKED LIKE A HUNG MACHINE RESULTED.  
  949.         ├OMMODORE LATER FIXED THIS PROBLEM.  ╔F ╒: SEEMS TO NOT WORK ON
  950.         YOUR DRIVE, TRY ╒; INSTEAD.  
  951.  
  952. ╤ $107) ╫HAT DOES THE FIRST ROUTINE IN THE 1541 DRIVE ╥╧═ ACTUALLY DO?
  953.  
  954. ┴ $107) ╘HE FUNCTION, CALLED ╙┼╘╠─┴ AND RESIDING AT $├100, TURNS ON THE
  955.         DRIVE ACTIVE ╠┼─ FOR THE CURRENT DRIVE.  ╘HE ROUTINE LOADS THE
  956.         CURRENT DRIVE FROM $7╞ AND SETS BIT 3 OF ─╙╦├╬╘ ($1├00).
  957.  
  958. ╤ $108) ╚OW MANY FILES WILL A 1581 DISK DRIVE HOLD?
  959.  
  960. ┴ $108) 296 FILES.  ╬OTE THAT IT IS NOT A MULTIPLE OF 144.  
  961.  
  962. ╤ $109) ├OMMODORE 1581 DRIVES HAVE A SPECIAL "AUTOBOOT" FEATURE THAT ENABLES
  963.         THE DRIVE TO LOAD AND RUN A PROGRAM OFF A DISK UPON DRIVE BOOTUP.
  964.         ╫HAT IS THE REQUIRED NAME OF THE FILE?
  965.  
  966. ┴ $109) ├╧╨┘╥╔╟╚╘ ├┬═ 86
  967.  
  968. ╤ $10┴) ╫HAT FILETYPE MUST THE FILE MENTIONED IN $109 BE?
  969.  
  970. ┴ $10┴) ╒╙╥.
  971.  
  972. ╤ $10┬) ╘O POWER UP A 1351 MOUSE IN "JOYSTICK MODE", WHAT MUST THE USER DO?
  973.  
  974. ┴ $10┬) ╔F ONE DEPRESSES THE RIGHT MOUSE BUTTON DURING POWER-UP, THE 1351
  975.         WILL BEHAVE JUST LIKE A JOYSTICK.
  976.  
  977. ╤ $10├) ─ESCRIBE THE CONTENTS OF THE ╨╧╘╪ OR ╨╧╘┘ REGISTERS WHEN USING A
  978.         1351 MOUSE.
  979.  
  980. ┴ $10├) ┼ACH REGISTER HOLDS THE SAME TYPE OF INFORMATION, JUST FOR A 
  981.         SEPARATE AXIS, SO WE WILL DESCRIBE JUST ONE REGISTER:
  982.         
  983.         ┬IT:   ╞UNCTION
  984.         
  985.         7      ─ON'T CARE
  986.         6-1    ═OUSE AXIS POSITION MOD 64.
  987.         0      ╬OISE ┬IT. (CHECK THIS BIT TO SEE WHETHER MOUSE HAS MOVED)
  988.  
  989. ╤ $10─) ├OMMODORE COMPUTERS TYPICALLY USE MOST OF ZERO PAGE FOR TEMPORARY
  990.         VARIABLES AND OTHER ITEMS.  ╚OWEVER, BOTH THE ╓╔├-20 AND THE 64
  991.         RESERVE 4 BYTES FOR USER PROGRAMS THAT NEED ZERO PAGE MEMORY.  ╫HERE
  992.         ARE THESE LOCATIONS?
  993.  
  994. ┴ $10─) $╞┬-$╞┼ (251-254).  ╔ AM NOT SURE THESE WERE "RESERVED" FOR 
  995.         PROGRAMMERS AS MUCH AS THEY WERE JUST NOT UTILIZED BY THE 
  996.         ├┬═ PROGRAMMERS.  
  997.  
  998. ╤ $10┼) ╬AME THE 16 COLORS AVAILABLE ON THE 64.
  999.  
  1000. ┴ $10┼) ┬LACK
  1001.         ╫HITE
  1002.         ╥ED
  1003.         ├YAN (╠IGHT ┬LUE-╟REEN)
  1004.         ╨URPLE
  1005.         ╟REEN
  1006.         ┬LUE
  1007.         ┘ELLOW
  1008.         ╧RANGE
  1009.         ┬ROWN
  1010.         ╠IGHT ╥ED
  1011.         ─ARK ╟RAY (╟RAY 1)
  1012.         ═EDIUM ╟REY (╟RAY 2)
  1013.         ╠IGHT ╟REEN 
  1014.         ╠IGHT ┬LUE
  1015.         ╠IGHT ╟RAY (╟RAY 3)
  1016.                          
  1017. ╤ $10╞) ┬OTH THE ╓╔├-20 AND THE ├64 EMULATE THE OPERATION OF THE 6551 ╒┴╥╘.
  1018.         ╚OW MANY "MOCK 6551" REGISTERS ARE MAPPED INTO THE MEMORY MAP?
  1019.  
  1020. ┴ $10╞) 5, FROM $293-$297 (659-663).  ╘HE REGISTER CONTENTS:
  1021.  
  1022.         $293   6551 ├ONTROL ╥EGISTER
  1023.         $294   6551 ├OMMAND ╥EGISTER
  1024.         $295-6 6551 ╒SER ─EFINED ┬AUD ╥ATE VALUE.
  1025.         $297   6551 ╙TATUS ╥EGISTER 
  1026.  
  1027.  
  1028. ------------├OMMODORE ╘RIVIA ┼DITION #18 ╤UESTIONS (┬┼╟╔╬)--------------
  1029.  
  1030. ╤ $110) ╫HAT IS THE NAME OF THE COMPANY THAT RECENTLY PURCHASED THE
  1031.         LIQUIDATED ├OMMODORE ASSETS?
  1032.  
  1033. ╤ $111) ┴T ONE TIME, ├OMMODORE ATTEMPTED TO MANUFACTURE A DUAL DRIVE
  1034.         VERSION OF THE 1571 CALLED THE 1572.  ╞OR WHAT TECHNICAL REASON
  1035.         DID IT UTIMATELY FAIL?
  1036.  
  1037. ╤ $112) ╧VER WHAT COMPUTER SYSTEM DID A ╒SER ╟ROUP SUE ├OMMODORE AND WIN?
  1038.  
  1039. ╤ $113) ╔N $103, THE QUESTION ASKED HOW TO CREATE A GRAPHIC OF A SMALL BOX
  1040.         ON THE 1525.  ╔N THIS QUESRTION, WE HAVE MADE A DIFFERENT DESIGN.
  1041.         ╔F YOU WANTED TO CREATE THE FOLLOWING GRAPHIC USING INDIVIDUAL
  1042.         DOTS ON THE PRINTER, WHAT BYTES WOULD YOU SEND TO THE PRINTER AFTER
  1043.         TURNING ON GRAPHICS MODE?
  1044.         
  1045.          **     * *
  1046.         *       ***
  1047.         *   **  ***
  1048.         *   * * * *
  1049.          ** **  * *
  1050.             * *
  1051.             **
  1052.  
  1053. ╤ $114) (╙OME ├65 QUESTIONS)  ╚OW MANY ╙╔─ CHIPS DOES THE THE DEVELOPMENT
  1054.         ├OMMODORE 65 MACHINE CONTAIN?
  1055.  
  1056. ╤ $115) ╫HAT ├╨╒ DOES THE ├OMMODORE 65 USE?
  1057.  
  1058. ╤ $116) ╫HAT IS THE ALTERNATE NAME FOR THE ├OMMODORE 65?
  1059.  
  1060. ╤ $117) ╚OW MANY PROCESSORS DOES THE INTERNAL 1581-COMPATIBLE DRIVE 
  1061.         ON THE ├65 CONTAIN?
  1062.  
  1063. ╤ $118) ╔N THE TRADITION OF NAMING CERTIAN ╔├S AFTER FAMOUS CARTOON
  1064.         CHARACTERS, ONE OF THE ╔├S IN THE ├65 IS NAMED AFTER A ╫ARNER
  1065.         ┬ROTHERS CARTOON CHARACTER.  ╫HICH ONE?
  1066.  
  1067. ╤ $119) ╫HAT VERSION OF ┬┴╙╔├ IS INCLUDED ON THE ├OMMODORE 65 IN ├65 MODE?
  1068.  
  1069. ╤ $11┴) ╚OW MANY ╔/╧ PORTS DOES A ├OMMODORE 65 CONTAIN?
  1070.  
  1071. ╤ $11┬) ╫HAT COMMON ├OMMODORE 64 ╔/╧ PORT DOES THE ├65 ╬╧╘ HAVE?
  1072.  
  1073. ╤ $11├) ╚OW MANY FUNCTION KEYS ARE ON A ├OMMODORE 65?
  1074.  
  1075. ╤ $11─) ╫HAT ├┬═ DISK DRIVE ─╧╙ WAS USED AS THE TEMPLATE FOR THE INTERNAL
  1076.         ├65 DRIVE ─╧╙?
  1077.  
  1078. ╤ $11┼) ╫HAT RESOLUTION OF TEXT SCREEN DOES THE ├65 POWER UP IN? (╨LEASE
  1079.         GIVE ANSWERS IN CHARACTERS).
  1080.  
  1081. ╤ $11╞) ╫HAT DISTINGUISHING NON-TEXTUAL CHARACTERISTIC IN THE ├65 IS NOT
  1082.         PRESENT IN OTHE ├OMMODORE 8-BIT COMPUTERS? 
  1083.  
  1084. ╘HE INFORMATION IN THIS BETWEEN THE LINES MARKED BY (┬┼╟╔╬) AND (┼╬─)
  1085. IS COPYRIGHT 1995 BY ╩IM ┬RAIN.  ╨ROVIDED THAT THE INFORMATION
  1086. BETWEEN THE (┬┼╟╔╬) AND (┼╬─) LINES IS NOT CHANGED EXCEPT TO CORRECT
  1087. TYPOGRAPHICAL ERRORS, THE SO MARKED COPYRIGHTED INFORMATION MAY BE
  1088. REPRODUCED IN ITS ENTIRETY ON OTHER NETWORKS OR IN OTHER MEDIUMS.  ╞OR 
  1089. MORE INFORMATION ABOUT USING THIS FILE, PLEASE CONTACT THE ADDRESS 
  1090. SHOWN BELOW.
  1091.  
  1092. ╩IM ┬RAIN
  1093. BRAIN@MAIL.MSEN.COM 
  1094. 602 ╬ORTH ╠EMEN
  1095. ╞ENTON, ═╔  48430
  1096. (810) 737-7300 X8528
  1097.  
  1098. ╙OME ARE EASY, SOME ARE HARD, TRY YOUR HAND AT:
  1099.     ├OMMODORE ╘RIVIA #18!
  1100. ========================================================================
  1101. ┬╞╠╔ - ╬EW GRAPHICS MODES 2
  1102. BY ╨ASI '┴LBERT' ╧JALA <ALBERT@CS.TUT.FI>
  1103.  
  1104. ╧NE DAY ╔ WAS WATCHING SOME DEMOS THAT USED LINECRUNCH ROUTINES FOR
  1105. WHOLE-SCREEN MULTICOLOR-GRAPHICS UPSCROLLERS.  ╔ ALREADY HAD MY
  1106. THEORIES ABOUT HOW AND WHY LINECRUNCH WORKED, BUT BECAUSE ╔ HAD NOT
  1107. USED IT ANYWHERE, THE DETAILS WERE A BIT VAGUE.  ╔N FACT, ╔ HAVE
  1108. MANY TIMES ACCIDENTALLY CREATED LINECRUNCH EFFECTS WHEN TRYING TO DO
  1109. SOMETHING ELSE WITH $─011.  ╨ROBABLY EVERY DEMO CODER HAS.
  1110.  
  1111. ┬UT YOU LEARN BY DOING.  ╔ HAD THE IDEA OF USING LINECRUNCH FOR ╞╠╔
  1112. INSTEAD OF A SIMPLE MULTICOLOR PICTURE AS IT ALWAYS SEEMED TO BE
  1113. USED.  ╚OWEVER, THIS HAS PROBABLY BEEN DONE BEFORE AND BECAUSE ╔
  1114. DON'T LIKE TO DO THINGS THAT HAVE BEEN DONE BEFORE, ╔ DECIDED TO USE
  1115. LINECRUNCH TO SHOW A TWO-SCREEN-TALL ╞╠╔ PICTURE.
  1116.  
  1117.  
  1118. _╠INECRUNCH ┬ASICS_
  1119.  
  1120. ╞OR THOSE NOT FAMILIAR WITH LINECRUNCH ROUTINES:  LINECRUNCH IS USED
  1121. TO SCROLL THE SCREEN ╒╨╫┴╥─╙ BY CONVINCING ╓╔├-╔╔ THAT IT HAS
  1122. ALREADY SHOWED MORE CHARACTER ROWS THAN IT IN REALITY HAS SHOWN.
  1123. ╙URPRISINGLY (OR THEN, MAYBE NOT :) THIS CONSISTS OF FIDDLING WITH
  1124. $─011.  ╘HE TIMING IS CRITICAL AS ALWAYS.
  1125.  
  1126. ╠INECRUNCH WORKS BY SETTING $─011 EQUAL THE LINE BEFORE THE CURRENT
  1127. LINE AND ╓╔├-╔╔ WILL HAPPILY THINK THAT IT IS TIME TO MOVE ON TO THE
  1128. NEXT CHARACTER ROW - ADD 40 TO THE VIDEO MATRIX COUNTER, 320 TO THE
  1129. GRAPHICS MEMORY COUNTER AND BE READY TO START A BAD LINE.  ╧R, MAYBE
  1130. '╬╧╘ TO GO BACK TO THE CURRENT ROW' WOULD BE A MORE SUITABLE
  1131. DESCRIPTION.  (╨ROGRAMMING ╓╔├-╔╔ IS SLOWLY BECOMING A SCIENCE.)
  1132.  
  1133. ╘HE REQUIRED TIMING ALSO DOES NOT CAUSE BAD LINES SO THAT YOU CAN
  1134. SKIP ANOTHER LINE IMMEDIATELY ON THE SUCCESSIVE LINE.  ╔N ADDITION,
  1135. LINES CAN BE SKIPPED ONLY AFTER THE FIRST CHARACTER ROW AND HALF OF
  1136. THE SECOND CHARACTER ROW HAVE BEEN DISPLAYED.  ╘HIS HAS SOMETHING TO
  1137. DO WITH THE WAY ╓╔├-╔╔ DECIDES WHEN THERE IS A BAD LINE.
  1138.  
  1139. ┬ECAUSE LINECRUNCH CAUSES ╓╔├-╔╔ TO SKIP ROWS, IT WILL RUN OUT OF
  1140. VIDEO MATRIX AND COLOR MEMORY (AND GRAPHICS MEMORY) BEFORE REACHING
  1141. THE END OF THE SCREEN.  ╚OWEVER, ╓╔├-╔╔ DOES NOT STOP DISPLAYING THE
  1142. GRAPHICS NOR DOES IT RESET THE INTERNAL COUNTERS.  ╘HE COUNTERS KEEP
  1143. ON RUNNING AND WRAP AROUND INSTEAD.
  1144.  
  1145. ╬ORMALLY, WHEN ╓╔├-╔╔ IS DISPLAYING THE LAST CHARACTER ROW, IT IS
  1146. SHOWING THE MEMORY FROM OFFSETS $3C0 TO $3E7.  ╔F ╓╔├-╔╔ HAS SKIPPED
  1147. ONE CHARACTER ROW, IT IS DISPLAYING FROM $3E8 TO $40F INSTEAD.  ┬UT,
  1148. THERE ARE ONLY 10 BITS FOR THE VIDEO MATRIX COUNTER (0..1023), SO IT
  1149. WRAPS AROUND TO ZERO AFTER $3FF.  ╘HIS MEANS THAT THE BEGINNING OF
  1150. THE VIDEO MATRIX IS DISPLAYED AT THE BOTTOM OF THE SCREEN.  ╘HE
  1151. CHARACTER ROWS BECOME SHIFTED BY 24 CHARACTER POSITIONS TO THE RIGHT
  1152. BECAUSE THERE WERE ORIGINALLY 24 UNUSED MEMORY LOCATIONS AT THE END
  1153. OF THE MEMORY (1000..1023).  (╘O BE HONEST, SPRITE IMAGE POINTERS
  1154. ARE NOT UNUSED MEMORY, BUT THEY ARE NOT USED WITH NORMAL ╞╠╔.)
  1155.  
  1156.          ____________________    ____________________
  1157.         ▄ABCDEFGHIJKLMNOPQRST▄  ▄ABCDEFGHIJKLMNOPQRST▄
  1158.         ▄                    ▄  ▄--------------------▄ <- ╙KIPPED ROW
  1159.         :                    :  :                    :
  1160.         :                    :  :                    :
  1161.         :                    :  :                    :
  1162.         ▄                    ▄  ▄NORMALLY LAST LINE  ▄
  1163.         ▄NORMALLY LAST LINE  ▄  ▄╪╪╪╪╪╪╪╪┌┌┌┌ABCDEFGH▄
  1164.         └--------------------'  └--------------------'
  1165.                                 ╪ = UNUSED MEM      (1000..1015)
  1166.                                 ┌ = SPRITE POINTERS (1016..1023)
  1167.  
  1168.         ╞IGURE 1: ╠INECRUNCH
  1169.  
  1170.  
  1171. ╘HE SAME THING HAPPENS FOR COLOR MEMORY BECAUSE IT USES THE SAME
  1172. COUNTER FOR ADDRESSING THE MEMORY (IN FACT, COLOR MEMORY ACCESS AND
  1173. CHARACTER DATA ACCESS ARE PERFORMED SIMULTANEOSLY, 12 BITS AT A
  1174. TIME).  ╘HE GRAPHICS MEMORY BEHAVES THE SAME WAY, EXCEPT THAT THE
  1175. COUNTER HAS THREE BITS MORE AND IT COUNTS AT EIGHT TIMES THE SPEED,
  1176. SO THAT IT WRAPS AT THE EXACT SAME TIME AS THE OTHER COUNTER.
  1177.  
  1178. ╘HE FIRST CHARACTER ROW CAN'T BE USED FOR LINECRUNCH AND THE SECOND
  1179. ONE IS ALSO LOST IN THE PROCESS.  ╘HE FIRST USABLE LINE TO DISPLAY
  1180. IS THE THIRD CHARACTER ROW.  ╚OWEVER, THOSE TWO LOST ROWS CAN STILL
  1181. BE USED AS AN EXTENSION AT THE END OF THE FIRST SCREEN.  ┘OU MUST
  1182. NOTICE, HOWEVER, THAT THE ALIGNMENT HAS BEEN CHANGED.  ┴FTER THESE
  1183. TWO ROWS HAVE BEEN DISPLAYED, THE VIDEO BANK IS SWITCHED TO GET NEW
  1184. FRESH DATA ON THE SCREEN.
  1185.  
  1186.  
  1187. _┬ACK TO ┬╞╠╔_
  1188.  
  1189. ╫RAPPED DATA IS NOTHING DIFFICULT TO WORK WITH.  ╔T IS JUST THE
  1190. MATTER OF WRITING THE RIGHT CONVERSION PROGRAM.  ┴LSO, THE NORMAL
  1191. ╞╠╔ ROUTINE CAN BE USED, WE JUST HAVE TO MAKE SURE ╓╔├ ALWAYS HAS
  1192. THE RIGHT BANK VISIBLE - SIMPLE ╠─┴ BANK,X:STA $──00 CAN ACCOMPLISH
  1193. THAT.  ╘HE MORE DIFFICULT ASPECT IS TO MAKE THE DISPLAY FREELY
  1194. LOCATABLE.  ╫E HAVE 32 KILOBYTES OF GRAPHICS DATA, THIS IS THE MAIN
  1195. REASON WE CAN'T EVEN THINK ABOUT USING COPYING.  ╠INECRUNCH COMBINED
  1196. WITH THE BAD LINE DELAYING TECHNIQUE WILL DO THE JOB MUCH MORE
  1197. NICELY.
  1198.  
  1199. ╞IGURE 2 SHOWS THE PRINCIPLES.  ╘O MAKE THINGS SIMPLER ╔ HAVE CHOSEN
  1200. LOCATION 0 TO MEAN THAT THE TOP OF THE PICTURE IS VISIBLE, 1 MEANS
  1201. THAT THE PICTURE IS SCROLLED ONE LINE UPWARDS AND SO ON.  ╫E CAN SEE
  1202. THAT LINECRUNCH IS NOT USED AT ALL FOR THE LOCATION 0.  ╘O MAKE THE
  1203. PICTURE START AT THE SAME POINT WHETHER LINECRUNCH HAS CRUNCHED
  1204. LINES OR NOT WE COMPENSATE THE NON-LOST RASTER LINES BY DELAYING THE
  1205. NEXT BAD LINE.  ╫HEN THE LOCATION IS N*8 (N=0,1,2..), THE SUM OF THE
  1206. LINECRUNCHED AND DELAYED LINES IS CONSTANT - THE GRAPHICS DISPLAY
  1207. ALWAYS STARTS AT THE SAME POINT.
  1208.  
  1209. ╘HEN HOW DO WE DEAL WITH THE LOCATION VALUES THAT ARE NOT EVENLY
  1210. DIVIDABLE BY EIGHT ?  ╬OW, LETS ASSUME THAT THE LOCATION IS ╠, AND
  1211. WE HAVE ├, WHICH IS THE LOCATION DIVIDED BY EIGHT (├ = ╠/8), AND ╥,
  1212. WHICH IS THE REMAINDER (╥ = ╠%8).  ╘O MAKE THE PICTURE SCROLL TO THE
  1213. RIGHT POSITION, WE NEED TO DELAY THE BAD LINE LESS THAN BEFORE - ╥
  1214. LINES LESS FOR LOCATION ╠ THAN FOR LOCATION ├*8.  ┼.G.  FOR LOCATION
  1215. 2 WE DELAY THE BAD LINE TWO LINES LESS THAN FOR LOCATION 0.  ╘HIS
  1216. ALSO SHOWS THAT WE NEED 7 LINES MORE THAN IS NEEDED FOR TO
  1217. COMPENSATE FOR THE LINECRUNCH.
  1218.  
  1219. ─ETERMINING THE NUMBER OF LINECRUNCH LINES IS A RECURSIVE PROCESS,
  1220. BECAUSE WHEN YOU USE MORE LINECRUNCH LINES, THAT DECREASES THE
  1221. NUMBER OF LINES YOU HAVE AVAILABLE FOR THE DISPLAY AND YOU NEED
  1222. BIGGER RANGE FOR THE LOCATION VALUE.  ╘HE LINECRUNCH CAN BE STARTED
  1223. AFTER 12 LINES, AND WE NEED AT LEAST 7 LINES TO USE THE SOFT
  1224. Y-SCROLL.  ╘HIS MAKES 181 LINES AVAILABLE FOR THE DISPLAY
  1225. ORIGINALLY.
  1226.  
  1227. ┬ECAUSE WE NEED TO SHOW 400 LINES OF GRAPHICS, WE WOULD NEED
  1228. (400-181)/8=28 LINECRUNCH LINES.  ╚OWEVER, THIS IN TURN REDUCES THE
  1229. NUMBER OF LINES WE HAVE FOR GRAPHICS TO 181-28=153 AND WE NEED
  1230. (400-153)/8=31 LINECRUNCH LINES.  ┴GAIN, 181-31 IS 150.  ╫E GET
  1231. (400-150)/8=32 AND THERE IT FINALLY CONVERGES AND WE HAVE 149 LINES
  1232. FOR GRAPHICS, WHICH MAKES LOCATION VALUES 0..251 VALID.
  1233.  
  1234.  
  1235. ╠OCATION        0       1       2  ..   8       9  ..   251
  1236.  
  1237.                 ___________________..   ___________..   ________
  1238.                 ___________________..   ___________..   ________
  1239. ╠INECRUNCH      -------------------..   ___________..
  1240.                 ^       ^       ^
  1241.                 ▄       ▄       ▄       ^       ^
  1242.                 ▄       ▄       ▄       ▄       ▄
  1243. ┬AD LINE DELAYED▄       ▄       ▄       ▄       ▄
  1244.                 ▄       ▄       ▄       ▄       ▄       ========
  1245.                 ▄       ▄       V       ▄       ▄       244
  1246.                 ▄       V       ___..   ▄       V       :
  1247.                 V       ________0       V       ___..   :
  1248. ╟FX ┼NABLED     ________0_______1__..   ________8__..   250_____
  1249.                 0       1       2       8       9       251
  1250.                 1       2       3       9       10      252
  1251.                 2       3       4       10      11      253
  1252.                 3       4       5       11      12      254
  1253.                 4       5       6       12      13      255
  1254.                 5       6       7       13      14      256
  1255.                 6       7       8       14      15      257
  1256.                 7       8       9       15      16      258
  1257.                 :       :       :       :       :       :
  1258.                 :       :       :       :       :       :
  1259.                 148     149     150..   156     157..   399
  1260.  
  1261.         ╞IGURE 2: ╠INECRUNCH AND ─═┴ DELAY IN ┬╞╠╔
  1262.                   (╟RAPHICS LINES NOT IN SCALE)
  1263.  
  1264.  
  1265. _├LIPPING ADDED_
  1266.  
  1267. ╬OW WE CAN SCROLL THE PICTURE TO ANY LOCATION WE WANT, BUT THE TOP
  1268. OF THE PICTURE IS NOT CLIPPED AND IT IS VERY ANNOYING TO WATCH.  ╫E
  1269. NEED TO ENABLE THE GRAPHICS AT THE SAME POINT REGARDLESS OF THE
  1270. Y-SCROLL VALUE.  ╘HE ANSWER IS IN THE EXTENDED COLOR MODE (┼├═).
  1271.  
  1272. ╫HEN BOTH ┼├═ AND MULTICOLOR MODE (═├═) ARE SELECTED, ╓╔├-╔╔ WILL
  1273. TURN THE DISPLAY TO BLACK.  ╘HIS IS BECAUSE THERE IS A CONFLICTING
  1274. SITUATION AND IT JUST CAN'T DECIDE WHICH COLOR SCHEME TO USE.  ╘HE
  1275. VIDEO ACCESSES WILL CONTINUE TO HAPPEN JUST LIKE BEFORE, THE DATA IS
  1276. JUST NOT DISPLAYED.  ╫HEN THE ┼├═ BIT IS CLEARED AGAIN, THE NORMAL
  1277. MULTICOLOR GRAPHICS IS SHOWN.
  1278.  
  1279. ╙O, WE SET THE ┼├═ BIT AND START TO DISPLAY THE FIRST EIGHT LINES OF
  1280. THE ╞╠╔.  ┬ECAUSE THE ╞╠╔ ROUTINE ALREADY WRITES TO $─011, WE JUST
  1281. MAKE SURE THE ┼├═ BIT IS SET IN THE FIRST ╥ NUMBER OF WRITES TO
  1282. $─011 AND ZERO IN ALL OTHER.
  1283.  
  1284. ╘HE VIEWER IS NOW 'COMPLETE'.  ┘OU CAN TAKE A LOOK AT THE CODE BELOW
  1285. OR YOU CAN GET ├64╟FX1_4.LHA AND SEE IT IN ACTION YOURSELF AND NOT
  1286. JUST RELY ON MY WORD.  ╘HE PACKAGE INCLUDES CONVERTER PROGRAMS FOR
  1287. ┬╞╠╔, ╞╠╔ AND ╦OALA (┴╬╙╔-├), COUPLE OF EXAMPLE PICTURES AND VIEWERS
  1288. FOR ╨┴╠ AND ╬╘╙├ MACHINES.
  1289.  
  1290. -╨ASI '┴LBERT' ╧JALA    ALBERT@CS.TUT.FI
  1291.  
  1292. --------------------------------------------------------------------------
  1293.  
  1294. ┬╞╠╔ VIEWER PROGRAM FOR ╨┴╠ MACHINES
  1295.  
  1296. ╒╨╧╙   = $├00   ; TEMPORARY AREA FOR TABLES
  1297. ┬┴╬╦   = $─00   ;  ╒╨╧╙ FOR LINECRUNCH, ┬┴╬╦ FOR ╞╠╔ BANK SELECT
  1298. ╥┴╙╘┼╥ = 29     ; WHERE TO POSITION THE SPRITE -> ╔╥╤ 20 LINES LATER
  1299. ─╒══┘  = $╞╞╞   ; DUMMY LOCATION FOR TIMING PURPOSES
  1300. ╞╠╔╙┌  = 19-1   ; VISIBLE ╞╠╔ SIZE IN CHARACTER ROWS - 1
  1301.  
  1302. *= $810
  1303.         ╙┼╔
  1304.         ╠─┴ #$7╞:╙╘┴ $─├0─      ; ╔╥╤ SETUP
  1305.         ╠─┴ #1:╙╘┴ $─01┴
  1306.         ╙╘┴ $─015:╙╘┴ ╦┼┘╫+1
  1307.         ╠─┴ #<╔╥╤:╙╘┴ $314
  1308.         ╠─┴ #>╔╥╤:╙╘┴ $315
  1309.         ╠─┴ #╥┴╙╘┼╥:╙╘┴ $─001:├╠├:┴─├ #20:╙╘┴ $─012
  1310.         ╠─┴ #0:╙╘┴ $─017
  1311.         ╠─┴ #0:╙╘┴ 2
  1312.         ╩╙╥ ╬┼╫╨╧╙              ; ╔NIT THE ╞╠╔ ROUTINES
  1313.         ╠─┴ #$┴:╙╘┴ $─011       ; ┬LANK SCREEN
  1314.         ╠─╪ #23                 ; ╔NIT TABLES
  1315. ┬╠╧╧╨   ╠─┴ #$94:╙╘┴ ┬┴╬╦,╪
  1316.         ╠─┴ #$96:╙╘┴ ┬┴╬╦+24,╪
  1317.         ─┼╪:┬╨╠ ┬╠╧╧╨
  1318.         ╠─╪ #15
  1319. ╠╧╧╨0   ╠─┴ ┘╔╬╔╘,╪:┴╬─ #$77    ; ├HANGE TO $37 TO BETTER SEE THE
  1320.         ╙╘┴ ╒╨╧╙,╪              ;  WORKINGS OF THE ROUTINES
  1321.         ╙╘┴ ╒╨╧╙+16,╪
  1322.         ╙╘┴ ╒╨╧╙+32,╪
  1323.         ─┼╪:┬╨╠ ╠╧╧╨0
  1324.  
  1325.         ╠─┴ #$34:╙╘┴ 1          ; ├OPY TO THE LAST VIDEO BANK
  1326.         ╠─┴ #$80:╙╘┴ ╙╥├+2      ; FROM $8000-$┬╞╞╞ TO $├000-$╞╞╞╞
  1327.         ╠─┴ #$├0:╙╘┴ ─╙╘+2
  1328.         ╠─╪ #0:╠─┘ #$40
  1329. ╙╥├     ╠─┴ $8000,╪
  1330. ─╙╘     ╙╘┴ $├000,╪
  1331.         ╔╬╪:┬╬┼ ╙╥├
  1332.         ╔╬├ ╙╥├+2:╔╬├ ─╙╘+2
  1333.         ─┼┘:┬╬┼ ╙╥├
  1334.         ╠─┴ #$37:╙╘┴ 1
  1335.  
  1336.         ╠─╪ #0                  ; ╔NIT COLOR MEMORY
  1337. ╠╨      ╠─┴ $3├00,╪:╙╘┴ $─800,╪ ; ┴LL 1024 BYTES ARE USED
  1338.         ╠─┴ $3─00,╪:╙╘┴ $─900,╪ ;  - SOME EVEN TWICE!
  1339.         ╠─┴ $3┼00,╪:╙╘┴ $─┴00,╪
  1340.         ╠─┴ $3╞00,╪:╙╘┴ $─┬00,╪
  1341.         ╔╬╪:┬╬┼ ╠╨
  1342.         ╠─┴ $─├0─:├╠╔
  1343.  
  1344. ╦┼┘╫    ╠─╪ #0:┬╬┼ ╦┼┘╫         ; ╫AIT FOR SPACE TO BE PRESSED
  1345.         ╙┼╔                     ; ╙YSTEM TO NORMAL
  1346.         ╠─┴ #$37:╙╘┴ 1
  1347.         ╩╙╥ $╞─┴3
  1348.         ╠─┴ #$97:╙╘┴ $──00
  1349.         ╩╙╥ $┼5┴0
  1350.         ╠─┘ #3
  1351. ╔╥╤╠    ╠─┴ $╞─30,┘:╙╘┴ $314,┘
  1352.         ─┼┘:┬╨╠ ╔╥╤╠
  1353.  
  1354.         ╠─╪ #0:╠─┴ #1           ; ├LEAR COLOR MEMORY
  1355. ├╠╠     ╙╘┴ $─800,╪:╙╘┴ $─900,╪
  1356.         ╙╘┴ $─┴00,╪:╙╘┴ $─┬00,╪
  1357.         ╔╬╪:┬╬┼ ├╠╠
  1358.         ├╠╔:╥╘╙
  1359.  
  1360. ┘╔╬╔╘   ┬┘╘ $78,$79,$7┴,$7┬,$7├,$7─,$7┼,$7╞
  1361.         ┬┘╘ $78,$79,$7┴,$7┬,$7├,$7─,$7┼,$7╞
  1362.  
  1363. *=*-<*+256
  1364.  
  1365. ╔╥╤     ╠─┴ #$18:╙╘┴ $─016:╠─╪ #0:╠─┴ #$5┴
  1366.         ╔╬├ ─╒══┘:─┼├ ─╒══┘             ; ╙YNCHRONIZATION
  1367.         ╙╘╪ $─020:╙╘╪ $─021:╙╘┴ $─011
  1368.  
  1369.         ╠─┴ #$15:╙╘┴ $─018
  1370.         ╠─┴ #$97:╙╘┴ $──00
  1371.         ╠─╪ #44                 ; ╫AIT FOR THE 4TH LINE
  1372. ╠╠      ─┼╪:┬╨╠ ╠╠:╬╧╨
  1373.         ╠─╪ #0
  1374.  
  1375. ╠╧╧╨3   ╬╧╨                     ; ╠INECRUNCH-PART ROUTINE
  1376.         ╠─┴ ╒╨╧╙+6,╪:╔╬├ ─╒══┘:╙╘┴ $─011
  1377.         ╬╧╨:╬╧╨:╔╬├ ─╒══┘
  1378.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
  1379.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
  1380.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
  1381.         ╔╬╪
  1382. ┼1      ├╨╪ #$10:┬╬┼ ╠╧╧╨3      ; ╙KIP THAT MANY CHARACTER ROWS-4
  1383.         ┬╔╘ $┼┴
  1384. ╠╧╧╨4   ╠─┴ ╒╨╧╙,╪:╔╬├ ─╒══┘:╙╘┴ $─011
  1385.         ╬╧╨:╬╧╨:╬╧╨:╔╬├ ─╒══┘
  1386.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
  1387.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
  1388.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨:╠─┴ #0
  1389.         ╔╬╪
  1390. ┼2      ├╨╪ #$1╞:┬╬┼ ╠╧╧╨4      ; ─ELAY ─═┴ UNTIL WE ARE AT THE
  1391.                                 ;  'SAME PLACE' EACH TIME
  1392.  
  1393.         ╠─┴ #0:╙╘┴ $─020        ; ╬OW WAIT FOR THE BAD LINE AND START ╞╠╔
  1394.         ┬╔╘ $┼┴:╬╧╨
  1395.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨
  1396.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨
  1397.         ╬╧╨:╬╧╨:╬╧╨:╬╧╨
  1398. ┬0      ╠─┴ #$92:╙╘┴ $──00:╬╧╨  ; ╘HE RIGHT VIDEO BANK
  1399.  
  1400.         ; ╫AIT FOR 0-7 LINES TO SET THE ┼├═ MODE OFF
  1401.         ;  (MAKES THE GRAPHICS VISIBLE)
  1402.  
  1403. ╞0      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$08:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1404. ╞1      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$18:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1405. ╞2      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$28:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1406. ╞3      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$38:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1407. ╞4      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$48:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1408. ╞5      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$58:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1409. ╞6      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$68:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1410. ╞7      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$78:╙╘┴ $─018
  1411.         ╠─╪ #╞╠╔╙┌:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1412.  
  1413.         ; ─O ╞╠╔ 18 MORE CHARACTER ROWS
  1414.  
  1415. ╞8      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$08:╙╘┴ $─018
  1416. ┬1      ╠─┴ ┬┴╬╦,╪:╙╘┴ $──00:┬╔╘ $┼┴
  1417. ╞9      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$18:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1418. ╞┴      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$28:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1419. ╞┬      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$38:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1420. ╞├      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$48:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1421. ╞─      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$58:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1422. ╞┼      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$68:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
  1423. ╞╞      ╠─┴ #0:╙╘┴ $─011:╠─┴ #$78:╙╘┴ $─018:╬╧╨:╬╧╨:─┼╪:┬═╔ ┼╞╠╔:╩═╨ ╞8
  1424. ┼╞╠╔    ╬╧╨
  1425.         ╠─┴ #$╞├
  1426. ╫╠      ├═╨ $─012:┬╬┼ ╫╠
  1427.         ╔╬├ ─╒══┘:╔╬├ ─╒══┘:╔╬├ ─╒══┘:╔╬├ ─╒══┘
  1428.         ╔╬├ ─╒══┘:╔╬├ ─╒══┘:╔╬├ ─╒══┘:╔╬├ ─╒══┘
  1429.         ╔╬├ ─╒══┘:╔╬├ ─╒══┘:╙╘┴ $─020
  1430.  
  1431.         ╩╙╥ ╬┼╫╨╧╙      ; ╒PDATE THE LOCATION
  1432.         ╩╙╥ ├╚╨╧╙       ; ├HANGE TO A NEW LOCATION
  1433.         ╠─┴ $─├01:┴╬─ #$10:┬╬┼ ╧╓3      ; ├HECK FOR THE SPACE BAR
  1434.         ╠─┴ #0:╙╘┴ ╦┼┘╫+1
  1435. ╧╓3     ╠─╪ #$53:╙╘╪ $─011:╔╬├ $─019:╩═╨ $┼┴81
  1436.  
  1437. ╬┼╫╨╧╙  ╠─┴ #0          ; ╔NIT THE ╔╥╤ ROUTINE FOR THIS POSITION
  1438.         ╠╙╥:╠╙╥:╠╙╥:├╠├:┴─├ #4:╙╘┴ ┼1+1
  1439.         ╠─┴ #7:╙┼├:╙┬├ ╬┼╫╨╧╙+1:┴╬─ #7:╘┴╪:╘┴┘:├╠├:┴─├ #35:╙╘┴ ┼2+1
  1440.         ╠─┴ ╒╨╧╙+3+7,┘:─┼╪:┬═╔ ╩0:┴╬─ #$3╞
  1441. ╩0      ╙╘┴ ╞7+1:┴╬─ #$3╞:╙╘┴ ╞╞+1
  1442.         ╠─┴ ╒╨╧╙+3+6,┘:─┼╪:┬═╔ ╩1:┴╬─ #$3╞
  1443. ╩1      ╙╘┴ ╞6+1:┴╬─ #$3╞:╙╘┴ ╞┼+1
  1444.         ╠─┴ ╒╨╧╙+3+5,┘:─┼╪:┬═╔ ╩2:┴╬─ #$3╞
  1445. ╩2      ╙╘┴ ╞5+1:┴╬─ #$3╞:╙╘┴ ╞─+1
  1446.         ╠─┴ ╒╨╧╙+3+4,┘:─┼╪:┬═╔ ╩3:┴╬─ #$3╞
  1447. ╩3      ╙╘┴ ╞4+1:┴╬─ #$3╞:╙╘┴ ╞├+1
  1448.         ╠─┴ ╒╨╧╙+3+3,┘:─┼╪:┬═╔ ╩4:┴╬─ #$3╞
  1449. ╩4      ╙╘┴ ╞3+1:┴╬─ #$3╞:╙╘┴ ╞┬+1
  1450.         ╠─┴ ╒╨╧╙+3+2,┘:─┼╪:┬═╔ ╩5:┴╬─ #$3╞
  1451. ╩5      ╙╘┴ ╞2+1:┴╬─ #$3╞:╙╘┴ ╞┴+1
  1452.         ╠─┴ ╒╨╧╙+3+1,┘:─┼╪:┬═╔ ╩6:┴╬─ #$3╞
  1453. ╩6      ╙╘┴ ╞1+1:┴╬─ #$3╞:╙╘┴ ╞9+1
  1454.         ╠─┴ ╒╨╧╙+3+0,┘:─┼╪:┬═╔ ╩7:┴╬─ #$3╞
  1455. ╩7      ╙╘┴ ╞0+1:┴╬─ #$3╞:╙╘┴ ╞8+1
  1456.         ╠─┴ #$96:╙╘┴ ┬0+1:╠─┴ #199:╙┼├:╙┬├ ╬┼╫╨╧╙+1:┬├├ ╧╓2
  1457.         ╠╙╥:╠╙╥:╠╙╥:├╠├:┴─├ #5:╙╘┴ ┬1+1
  1458.         ╥╘╙
  1459. ╧╓2     ╠─┴ #0:╙╘┴ ┬1+1:╠─╪ #$94:╙╘╪ ┬0+1:╥╘╙
  1460.  
  1461. ├╚╨╧╙   ╠─╪ ╬┼╫╨╧╙+1
  1462.         ╠─┴ $─├00:╘┴┘           ; ╟ET JOYSTICK
  1463.         ┴╬─ #$10:┬╬┼ ─╔╥        ; ╔F NO BUTTON PRESSED
  1464.         ╘┘┴:┴╬─ #1:┬┼╤ ╒╨       ; ╔F JOY UP
  1465.         ╘┘┴:┴╬─ #2:┬┼╤ ─╧╫╬     ; ╔F JOY DOWN
  1466.         ╥╘╙
  1467. ─╔╥     ╠─┴ #0:┬┼╤ ╒╨
  1468. ─╧╫╬    ─┼╪:├╨╪ #$╞╞:┬╬┼ ─╧╦
  1469.         ╠─╪ #0:╙╘╪ ─╔╥+1        ; ├HANGE DIRECTION
  1470. ─╧╦     ╙╘╪ ╬┼╫╨╧╙+1:╥╘╙
  1471. ╒╨      ╔╬╪:├╨╪ #$╞─:┬├├ ╒╧╦    ; 251(LOCATIONS)+149(VISIBLE)=400
  1472.         ╠─╪ #$╞├:╙╘╪ ─╔╥+1      ; ├HANGE DIRECTION
  1473. ╒╧╦     ╙╘╪ ╬┼╫╨╧╙+1:╥╘╙
  1474.  
  1475.  
  1476. --------------------------------------------------------------------------
  1477.  
  1478. ╘HE ┬╞╠╔ FILE FORMAT:
  1479.  
  1480.                         ╞ILE            ┬╞╠╔ ─ISPLAY
  1481.         ╠INES           ╧FFSET          ╧FFSET          ╠INES     ╙IZE
  1482. ├OLORS  0-1.3           0..55           944..999        22.7-24   56
  1483.   ╔     1.3-2           56..79          -                         24
  1484.         2-24            80..999         0..919          0-22      920
  1485.         24-24.7         1000..1023      920..943        22-22.7   24
  1486.  
  1487.   ╔╔    0-1.3           0..55           1968..2024      49.3-50.6 56
  1488.         1.3-24.7        56..1023        1000..1967      24-49.3   968
  1489.  
  1490.  
  1491. ╟FX     0-1.3           0..447          7552..7999      22.7-24   448
  1492.   ╔     1.3-2           448..639        -                         192
  1493.         2-24            640..7999       0..7359         0-22      7360
  1494.         24-24.7         8000..8191      7360..7551      22-22.7   192
  1495.  
  1496.   ╔╔    0-1.3           0..447          15744..16192    49.3-50.6 448
  1497.         1.3-24.7        448..8191       8000..15743     24-49.3   7744
  1498.  
  1499. ========================================================================
  1500. ═AKING STABLE RASTER ROUTINES (├64 AND ╓╔├-20)
  1501. BY ═ARKO ═AKELA (═ARKO.═AKELA@╚╒╘.╞╔)
  1502.  
  1503. ╨REFACE
  1504.  
  1505. ╘OO MANY GRAPHICAL EFFECTS, ALSO CALLED RASTER EFFECTS, HAVE BEEN
  1506. CODED IN A VERY SLOPPY WAY.  ╞OR INSTANCE, IF THERE ARE ANY COLOR BARS
  1507. ON THE SCREEN IN A GAME OR DEMO, THE COLORS OFTEN JITTER A BIT,
  1508. E.G. THEY ARE NOT STABLE.  ┴ND ALSO, IT IS FAR TOO EASY TO MAKE
  1509. VIRTUALLY ANY DEMO CRASH BY HITTING THE ╥ESTORE KEY, OR AT LEAST CAUSE
  1510. VISUAL DISTORTIONS ON THE SCREEN.
  1511.  
  1512. ┴S LATE AS A YEAR AGO ╔ STILL HADN'T CODED A STABLE RASTER INTERRUPT
  1513. ROUTINE MYSELF.  ┬UT THEN ╔ HAD TO DO IT, SINCE ╔ WAS RESEARCHING THE
  1514. VIDEO CHIP TIMING DETAILS TOGETHER WITH MY ╟ERMAN FRIEND ┴NDREAS
  1515. ┬OOSE.  ╔T WAS ASHAMING THAT WE HAD THE SAME LEVEL OF KNOWLEDGE WHEN
  1516. IT CAME TO THE HARDWARE, BUT HE WAS THE ONLY OF US WHO HAD WRITTEN A
  1517. STABLE RASTER ROUTINE.  ╫ELL, FINALLY ╔ MADE ME TO START CODING.  ╔
  1518. USED THE SAME DOUBLE-INTERRUPT IDEA AS ┴NDREAS USED IN HIS ROUTINE.
  1519.  
  1520. ┴FTER A COUPLE OF ERRORS MY ROUTINE WORKED, AND ╔ UNDERSTOOD HOW IT
  1521. WORKS EXACTLY.  (╘HIS IS SOMETHING THAT SEPARATES US NORMAL CODERS
  1522. FROM DEMO PEOPLE: ╘HEY OFTEN CODE BY INSTINCT; BY PATCHING THE ROUTINE
  1523. UNTIL IT WORKS, WITHOUT KNOWING EXACTLY WHAT IS HAPPENING.  ╘HAT'S WHY
  1524. DEMOS OFTEN RELY ON WEIRD THINGS, LIKE CRASH IF THE MEMORY IS NOT
  1525. INITIALIZED PROPERLY.)
  1526.  
  1527. ╔N THIS ARTICLE, ╔ DOCUMENT TWO METHODS OF CREATING STABLE RASTER
  1528. ROUTINES ON ├OMMODORE COMPUTERS.  ╘HE PRINCIPLES APPLY FOR MOST 8-BIT
  1529. COMPUTERS, NOT ONLY ├OMMODORES, BUT RASTER EFFECTS ARE VERY RARELY
  1530. SEEN ON OTHER COMPUTERS.
  1531.  
  1532.  
  1533. ┬ACKGROUND
  1534.  
  1535. ╫HAT ARE RASTER EFFECTS?  ╘HEY ARE EFFECTS, WHERE YOU CHANGE THE
  1536. SCREEN APPEARANCE WHILE IT IS BEING DRAWN.  ╞OR INSTANCE, YOU CAN SET
  1537. THE SCREEN COLOR TO WHITE IN THE TOP OF THE SCREEN, AND TO BLACK IN
  1538. THE MIDDLE OF THE SCREEN.  ╔N THAT WAY, YOU WILL GET A PICTURE WHOSE
  1539. TOP HALF IS WHITE AND BOTTOM HALF BLACK.  ╬ORMALLY SUCH EFFECTS ARE
  1540. IMPLEMENTED WITH INTERRUPT ROUTINES THAT ARE EXECUTED SYNCHRONIZED
  1541. WITH THE SCREEN REFRESH.
  1542.  
  1543. ╘HE VIDEO CHIP ON THE ├OMMODORE 64 AND MANY OTHER VIDEOCHIPS HAVE A
  1544. SPECIAL INTERRUPT FEATURE CALLED THE ╥ASTER INTERRUPT.  ╔T WILL
  1545. GENERATE AN ╔╥╤ IN THE BEGINNING OF A SPECIFIED RASTER LINE.  ╧N OTHER
  1546. COMPUTERS, LIKE THE ╓╔├-20, THERE IS NO ╥ASTER INTERRUPT, BUT YOU CAN
  1547. GENERATE THE INTERRUPTS WITH A TIMER, PROVIDED THAT THE TIMER AND THE
  1548. VIDEOCHIP ARE CLOCKED FROM THE SAME SOURCE.
  1549.  
  1550. ┼VEN IF THE PROCESSOR GETS AN INTERRUPT SIGNAL AT THE SAME POSITION ON
  1551. EACH VIDEO FRAME, IT WON'T ALWAYS BE EXECUTING THE FIRST INSTRUCTION
  1552. OF THE INTERRUPT ROUTINE AT THE SAME SCREEN POSITION.  ╘HE ╬═╧╙ 6502
  1553. MACHINE INSTRUCTIONS CAN TAKE 2 TO 9 MACHINE CYCLES TO EXECUTE, AND IF
  1554. THE MAIN PROGRAM CONTAINS INSTRUCTIONS OF VERY VARYING LENGTHS, THE
  1555. BEGINNING POSITION OF THE INTERRUPT CAN JUMP BETWEEN 7 DIFFERENT
  1556. POSITIONS.  ╘HIS IS WHY YOU NEED TO SYNCHRONIZE THE RASTER ROUTINE
  1557. WHEN DOING SERIOUS EFFECTS.
  1558.  
  1559. ┴LSO, EXECUTING THE INTERRUPT SEQUENCE WILL TAKE 7 ADDITIONAL CYCLES,
  1560. AND THE INTERRUPT SEQUENCE WILL ONLY START AFTER THE CURRENT
  1561. INSTRUCTION IF THE INTERRUPT ARRIVED AT LEAST TWO CYCLES BEFORE THE
  1562. END OF THE CURRENT INSTRUCTION.  ╔T IS EVEN POSSIBLE THAT AN INTERRUPT
  1563. ARRIVES WHILE INTERRUPTS ARE DISABLED AND THE PROCESSOR IS JUST
  1564. STARTING TO EXECUTE A ├╠╔ INSTRUCTION.  ┴LAS, THE PROCESSOR WILL NOT
  1565. JUMP TO THE INTERRUPT RIGHT AFTER THE ├╠╔, BUT IT WILL EXECUTE THE
  1566. NEXT INSTRUCTION BEFORE JUMPING TO IT.  ╘HIS IS NATURAL, SINCE THE ├╠╔
  1567. TAKES ONLY TWO CYCLES.  ┬UT ANYWAY, THIS IS ONLY A CONSTANT IN OUR
  1568. EQUATION, AND ACTUALLY OUT OF THE SCOPE OF THIS ARTICLE.
  1569.  
  1570. ╚OW TO SYNCHRONIZE A RASTER INTERRUPT ROUTINE?  ╘HE ONLY WAY IS TO
  1571. CHECK THE CURRENT SCREEN POSITION AND DELAY APPROPRIATELY MANY CYCLES.
  1572. ╘HERE ARE SEVERAL WAYS OF DOING THIS, SOME OF WHICH ARE VERY AWFUL AND
  1573. INEFFICIENT.  ╘HE UGLIEST WAYS OF DOING THIS ON THE ├OMMODORE 64 ╔
  1574. KNOW ARE BUSY-WAITING SEVERAL RASTER LINES AND POLLING THE RASTER LINE
  1575. VALUE, OR USING THE ╠IGHT PEN FEATURE, WHICH WILL FAIL IF THE USER
  1576. PRESSES THE FIRE BUTTON ON ╩OYSTICK PORT 1.  ╚ERE ╔ WILL PRESENT TWO
  1577. WAYS, BOTH VERY ELEGANT IN MY OPINION.
  1578.  
  1579.  
  1580. ╒SING AN AUXILIARY TIMER
  1581.  
  1582. ╧N THE ╓╔├-20, THERE IS NO ╥ASTER INTERRUPT FEATURE IN THE VIDEO CHIP.
  1583. ┴LL YOU CAN DO IS TO USE A TIMER FOR GENERATING RASTER INTERRUPTS.
  1584. ┴ND IF YOU USE TWO TIMERS RUNNING AT A CONSTANT PHASE DIFFERENCE, YOU
  1585. CAN GET FULL SYNCHRONIZATION.  ╘HE FIRST TIMER GENERATES THE RASTER
  1586. INTERRUPT, AND THE SECOND TIMER, THE AUXILIARY TIMER, TELLS THE RASTER
  1587. ROUTINE WHERE IT IS RUNNING.  ┴CTUALLY YOU COULD EVEN USE THE FIRST
  1588. TIMER ALSO FOR THE CHECKING, BUT THE CODE WILL LOOK NICER IN THE WAY ╔
  1589. WILL BE PRESENTING NOW.  ┬ESIDES, YOU CAN USE THE AUXILIARY TIMER IDEA
  1590. EVEN WHEN REAL RASTER INTERRUPTS ARE AVAILABLE.
  1591.  
  1592. ╘HE MAJOR DRAWBACK OF USING AN AUXILIARY TIMER IS INITIALIZING IT.
  1593. ╘HE INITIALIZATION ROUTINE MUST SYNCHRONIZE WITH THE SCREEN, THAT IS,
  1594. WAIT FOR THE BEGINNING OF THE WANTED RASTER LINE.  ╘O ACCOMPLISH THIS,
  1595. THE ROUTINE MUST FIRST WAIT FOR A RASTER LINE THAT OCCURS A BIT
  1596. EARLIER.  ┴BOUT THE ONLY WAY TO DO THIS IS WITH A LOOP LIKE
  1597.  
  1598.                 ╠─┴ #VALUE
  1599.         LOOP    ├═╨ RASTER
  1600.                 ┬╬┼ LOOP
  1601.  
  1602. ╧NE ROUND OF THIS LOOP WILL TAKE 4+3=7 CYCLES TO EXECUTE, ASSUMING
  1603. THAT ABSOLUTE ADDRESSING IS BEING USED.  ╘HE LOOP WILL BE FINISHED IF
  1604. THE RASTER REGISTER CONTAINS THE WANTED VALUE WHILE THE PROCESSOR
  1605. READS IT ON THE LAST CYCLE OF THE ├═╨ INSTRUCTION.  ╘HE RASTER
  1606. REGISTER CAN ACTUALLY HAVE CHANGED ALREADY ON THE FIRST CYCLE OF THE
  1607. ┬╬┼ INSTRUCTION ON THE PREVIOUS RUN OF THE LOOP, THAT IS 7 CYCLES
  1608. EARLIER!
  1609.  
  1610. ┬ECAUSE OF THIS, THE ROUTINE MUST POLL THE RASTER REGISTER FOR SEVERAL
  1611. RASTER LINES, ALWAYS CONSUMING ONE CYCLE MORE IF THE RASTER REGISTER
  1612. CHANGED TOO EARLY.  ┴S THE SYNCHRONIZATION CAN BE OFF AT MOST BY 7
  1613. CYCLES, A LOOP OF 7 RASTER REGISTER VALUE CHANGES WOULD DO, BUT ╔ MADE
  1614. THE LOOP A BIT LONGER IN MY ╓╔├-20 ROUTINE.  (╫ELL, ╔ HAVE TO ADMIT IT,
  1615. ╔ WAS TOO LAZY TO MAKE IT WORK ONLY WITH 7 ROUNDS.)
  1616.  
  1617. ┴FTER THE INITIALIZATION ROUTINE IS FULLY SYNCHRONIZED THE SCREEN, IT
  1618. CAN SET UP THE TIMER(S) AND INTERRUPTS AND EXIT.  ╘HE AUXILIARY TIMER
  1619. IN MY ╓╔├-20 DEMO ROUTINE IS SEVERAL DOZENS OF CYCLES AFTER THE
  1620. PRIMARY TIMER, SEE THE SOURCE CODE FOR COMMENTS.  ╔T IS ARRANGED SO
  1621. THAT THE AUXILIARY TIMER WILL BE AT LEAST 0 WHEN IT IS BEING READ IN
  1622. THE RASTER ROUTINE.  ╘HE RASTER ROUTINE WILL WAIT AS MANY EXTRA CYCLES
  1623. AS THE AUXILIARY TIMER READS, HOWEVER AT MOST 15 CYCLES.
  1624.  
  1625.  
  1626. ╒SING DOUBLE RASTER INTERRUPT
  1627.  
  1628. ╧N THE ├OMMODORE 64, ╔ HAVE NEVER SEEN THE AUXILIARY TIMER SCHEME
  1629. BEING USED.  ┴CTUALLY ╔ HAVEN'T SEEN IT BEING USED ANYWHERE, ╔ WAS
  1630. PROBABLY THE FIRST ONE WHO MADE A STABLE RASTER INTERRUPT ROUTINE ON
  1631. THE ╓╔├-20.  ╔NSTEAD, THE DOUBLE INTERRUPT METHOD IS BECOMING THE
  1632. STANDARD ON THE ├64 SIDE.
  1633.  
  1634. ╘HE DOUBLE INTERRUPT METHOD IS BASED ENTIRELY ON THE ╥ASTER INTERRUPT
  1635. FEATURE OF THE VIDEO CHIP.  ╔N THE FIRST RASTER INTERRUPT ROUTINE, THE
  1636. PROGRAM SETS UP ANOTHER RASTER INTERRUPT ON A FURTHER LINE, CHANGES
  1637. THE INTERRUPT VECTOR AND ENABLES INTERRUPTS.
  1638.  
  1639. ╔N THE PLACE WHERE THE SECOND RASTER INTERRUPT WILL OCCUR, THERE WILL
  1640. BE 2-BYTE INSTRUCTIONS IN THE FIRST INTERRUPT ROUTINE.  ╔N THIS WAY,
  1641. THE BEGINNING OF THE NEXT RASTER INTERRUPT WILL BE OFF AT MOST BY ONE
  1642. CYCLE.  ╙OME CODERS MIGHT NOT CARE ABOUT THIS ONE CYCLE, BUT IF YOU
  1643. CAN DO IT RIGHT, WHY WOULDN'T YOU DO IT RIGHT UNTIL THE END?
  1644.  
  1645. ┴T THE BEGINNING OF THE SECOND RASTER INTERRUPT ROUTINE, YOU WILL READ
  1646. THE RASTER LINE COUNTER REGISTER AT THE POINT WHERE IT IS ABOUT TO
  1647. CHANGE.  ╫HEN THE RASTER ROUTINE IS BEING EXECUTED, THERE ARE TWO
  1648. POSSIBILITIES: ┼ITHER THE RASTER COUNTER HAS JUST CHANGED, OR IT WILL
  1649. CHANGE ON THE NEXT CYCLE.  ╙O, YOU JUST NEED TO COMPARE IF THE
  1650. REGISTER CHANGED ONE CYCLE TOO EARLY OR NOT, AND DELAY A CYCLE WHEN
  1651. NEEDED.  ╘HIS IS EASILY ACCOMPLISHED WITH A BRANCH TO THE NEXT ADDRESS.
  1652.  
  1653. ╧F COURSE, SOMEWHERE IN YOUR SECOND RASTER INTERRUPT ROUTINE YOU MUST
  1654. RESTORE THE ORIGINAL RASTER INTERRUPT POSITION AND SET THE INTERRUPT
  1655. VECTOR TO POINT TO THE FIRST INTERRUPT ROUTINE.
  1656.  
  1657.  
  1658. ┴PPLYING IN PRACTICE
  1659.  
  1660. ╔ ALMOST FORGOT MY COMPLAINTS ABOUT DEMOS CRASHING WHEN YOU ACTIVELY
  1661. HIT THE ╥ESTORE KEY.  ╧N THE ╓╔├-20, YOU CAN DISABLE ╬═╔ INTERRUPTS
  1662. GENERATED BY THE ╥ESTORE KEY, AND ON THE ├64, YOU CAN GENERATE AN ╬═╔
  1663. INTERRUPT WITH THE ├╔┴2 TIMER AND LEAVE THE ╬═╔-LINE LOW, SO THAT NO
  1664. FURTHER HIGH-TO-LOW TRANSITIONS WILL BE RECOGNIZED ON THE LINE.  ╘HE
  1665. EXAMPLE PROGRAMS DEMONSTRATE HOW TO DO THIS.
  1666.  
  1667. ╙O FAR, THIS ARTICLE HAS BEEN PRETTY THEORETICAL.  ╘O APPLY THESE
  1668. RESULTS IN PRACTICE, YOU MUST DEFINITELY KNOW HOW MANY ├╨╒ CLOCK
  1669. CYCLES THE VIDEO CHIP CONSUMES WHILE DRAWING A SCAN LINE.  ╘HIS IS
  1670. FAIRLY EASY TO MEASURE WITH A TIMER INTERRUPT, IF YOU PATCH THE
  1671. INTERRUPT HANDLER SO THAT IT CHANGES THE SCREEN COLOR ON EACH RUN.
  1672. ╙ET THE TIMER INTERVAL TO ╠╔╬┼╙*├╧╠╒═╬╙ CYCLES, WHERE ╠╔╬┼╙ IS THE
  1673. AMOUNT OF RASTER LINES AND ├╧╠╒═╬╙ IS YOUR GUESS FOR THE AMOUNT OF
  1674. CLOCK CYCLES SPENT IN A RASTER LINE.
  1675.  
  1676. ╔F YOUR GUESS IS RIGHT, THE COLOR WILL ALWAYS BE CHANGED IN THE SAME
  1677. SCREEN POSITION (NEGLECTING THE 7-CYCLE JITTER).  ╫HEN ADJUSTING THE
  1678. TIMER, REMEMBER THAT THE TIMERS ON THE 6522 ╓╔┴ REQUIRE 2 CYCLES FOR
  1679. RE-LOADING, AND THE ONES ON THE 6526 ├╔┴ NEED ONE EXTRA CYCLE.  ╦EEP
  1680. TRYING DIFFERENT TIMER VALUES UNTIL YOU THE SCREEN COLOR CHANGES AT
  1681. ONE FIXED POSITION.
  1682.  
  1683. ├OMMODORE USED SEVERAL DIFFERENT VALUES FOR ╠╔╬┼╙ AND ├╧╠╒═╬╙ ON ITS
  1684. VIDEOCHIPS.  ╘HEY NEVER MANAGED TO MAKE THE SCREEN REFRESH RATE
  1685. EXACTLY 50 OR 60 ╚ERTZ, BUT THEY DIDN'T HESITATE TO CLAIM THAT THEIR
  1686. COMPUTERS COMPLY WITH THE ╨┴╠-┬ OR ╬╘╙├-═ STANDARDS.  ╔N THE FOLLOWING
  1687. TABLES ╔ HAVE GATHERED SOME INFORMATION OF SOME ├OMMODORE VIDEO CHIPS.
  1688.  
  1689.  
  1690.   ╬╘╙├-═ SYSTEMS:
  1691.  
  1692.             ├HIP      ├RYSTAL  ─OT      ╨ROCESSOR ├YCLES/ ╠INES/
  1693.     ╚OST    ╔─        FREQ/╚Z  CLOCK/╚Z CLOCK/╚Z  LINE    FRAME
  1694.     ------  --------  -------- -------- --------- ------- ------
  1695.     ╓╔├-20  6560-101  14318181  4090909   1022727      65    261
  1696.     ├64     6567╥56┴  14318181  8181818   1022727      64    262
  1697.     ├64     6567╥8    14318181  8181818   1022727      65    263
  1698.  
  1699.   ╠ATER ╬╘╙├-═ VIDEO CHIPS WERE MOST PROBABLY LIKE THE 6567╥8.  ╬OTE
  1700.   THAT THE PROCESSOR CLOCK IS A 14TH OF THE CRYSTAL FREQUENCY ON ALL
  1701.   ╬╘╙├-═ SYSTEMS.
  1702.  
  1703.   ╨┴╠-┬ SYSTEMS:
  1704.  
  1705.             ├HIP      ├RYSTAL  ─OT      ╨ROCESSOR ├YCLES/ ╠INES/
  1706.     ╚OST    ╔─        FREQ/╚Z  CLOCK/╚Z CLOCK/╚Z  LINE    FRAME
  1707.     ------  --------  -------- -------- --------- ------- ------
  1708.     ╓╔├-20  6561-101   4433618  4433618   1108405      71    312
  1709.     ├64     6569      17734472  7881988    985248      63    312
  1710.  
  1711.   ╧N THE ╨┴╠-┬ ╓╔├-20, THE CRYSTAL FREQUENCY IS SIMULTANEOUSLY THE DOT
  1712.   CLOCK, WHICH IS ┬╘╫ A 4TH OF THE CRYSTAL FREQUENCY USED ON THE ├64.
  1713.   ╧N THE ├64, THE CRYSTAL FREQUENCY IS DIVIDED BY 18 TO GENERATE THE
  1714.   PROCESSOR CLOCK, WHICH IN TURN IS MULTIPLIED BY 8 TO GENERATE THE
  1715.   DOT CLOCK.
  1716.  
  1717.   ╘HE BASIC TIMINGS ARE THE SAME ON ALL 6569 REVISIONS, AND ALSO ON
  1718.   ANY LATER ├64 AND ├128 VIDEO CHIPS.  ╔F ╔ REMEMBER CORRECTLY, THESE
  1719.   VALUES WERE THE SAME ON THE ├16 VIDEOCHIP ╘┼─ AS WELL.
  1720.  
  1721. ╬OTE THAT THE DOT CLOCK IS 4 TIMES THE PROCESSOR CLOCK ON THE ╓╔├-20,
  1722. AND 8 TIMES THAT ON THE ├64.  ╘HAT IS, ONE PROCESSOR CYCLE IS HALF A
  1723. CHARACTER WIDE ON THE ╓╔├-20, AND A FULL CHARACTER ON A ├64.  ╔ DON'T
  1724. HAVE EXACT MEASUREMENTS OF THE ╓╔├-20 TIMING, BUT IT SEEMS THAT WHILE
  1725. THE ╓╔├-20 VIDEOCHIPS DRAW THE CHARACTERS ON THE SCREEN, IT FIRST
  1726. READS THE CHARACTER CODE, AND THEN, ON THE FOLLOWING VIDEO CYCLE, THE
  1727. APPEARANCE ON THE CURRENT CHARACTER LINE.  ╘HERE ARE NO BAD LINES,
  1728. LIKE ON THE ├64, WHERE THE CHARACTER CODES (AND COLORS) ARE FETCHED ON
  1729. EVERY 8TH RASTER LINE.
  1730.  
  1731. ╘HOSE ONES WHO GOT UPSET WHEN ╔ SAID THAT ├OMMODORE HAS NEVER MANAGED
  1732. TO MAKE A FULLY ╨┴╠-┬ OR ╬╘╙├-═ COMPLIANT 8-BIT COMPUTER SHOULD TAKE A
  1733. CLOSER LOOK AT THE "╠INES/FRAME" COLUMNS.  ╔F THAT DOES NOT CONVINCE
  1734. YOU, CALCULATE THE RASTER LINE RATE AND THE SCREEN REFRESH RATE FROM
  1735. THE VALUES IN THE TABLE AND SEE THAT THEY DON'T COMPLY WITH THE
  1736. STANDARDS.  ╘O CALCULATE THE LINE RATE, DIVIDE THE PROCESSOR CLOCK
  1737. FREQUENCY BY THE AMOUNT OF CYCLES PER LINE.  ╘O GET THE SCREEN REFRESH
  1738. RATE, DIVIDE THAT FREQUENCY BY THE AMOUNT OF RASTER LINES.
  1739.  
  1740.  
  1741. ╘HE ├ODE
  1742.  
  1743. ╧╦, ENOUGH THEORY AND BACKGROUND.  ╚ERE ARE THE TWO EXAMPLE PROGRAMS,
  1744. ONE FOR THE ╓╔├-20 AND ONE FOR THE ├64.  ╔N ORDER TO FULLY UNDERSTAND
  1745. THEM, YOU NEED TO KNOW THE EXACT EXECUTION TIMES OF ╬═╧╙ 6502
  1746. INSTRUCTIONS.  (┴LL 8-BIT ├OMMODORE COMPUTERS USE THE ╬═╧╙ 6502
  1747. PROCESSOR CORE, EXCEPT THE ├65 PROTOTYPE, WHICH USED A INFERIOR ├═╧╙
  1748. VERSION WITH ALL NICE POORLY-DOCUMENTED FEATURES REMOVED.)  ┘OU SHOULD
  1749. CHECK THE 64DOC DOCUMENT, AVAILABLE ON MY ╫╫╫ PAGES AT
  1750. HTTP://WWW.HUT.FI/▐MSMAKELA/CBM/EMUL/X64/64DOC.HTML, OR VIA ╞╘╨ AT
  1751. FTP.FUNET.FI:/PUB/CBM/DOCUMENTS/64DOC.  ╔ CAN ALSO E-MAIL IT TO YOU ON
  1752. REQUEST.
  1753.  
  1754. ┴LSO, ╔ HAVE WRITTEN A COMPLETE DESCRIPTION OF THE VIDEO TIMING ON THE
  1755. 6567╥56┴, 6567╥8 AND 6569 VIDEO CHIPS, WHICH COULD MAYBE BE TURNED
  1756. INTO ANOTHER ├=╚ACKING ARTICLE.  ╘HE DOCUMENT IS CURRENTLY PARTIALLY
  1757. IN ┼NGLISH AND PARTIALLY IN ╟ERMAN.  ╘HE ┼NGLISH PART IS AVAILABLE
  1758. FROM FTP.FUNET.FI AS /PUB/CBM/DOCUMENTS/PAL.TIMING, AND ╔ CAN SEND
  1759. COPIES OF THE ╟ERMAN PART (SCREEN RESOLUTION, SPRITE DISTURBANCE
  1760. MEASUREMENTS, AND MORE PRECISE TIMING INFORMATION) VIA E-MAIL.
  1761.  
  1762. ╘HE CODE IS WRITTEN FOR THE ─┴╙═ ASSEMBLER, OR MORE PRECISELY FOR A
  1763. EXTENDED ┴╬╙╔ ├ PORT OF IT MADE BY ╧LAF ╙EIBERT.  ╘HIS EXCELLENT
  1764. CROSS-ASSEMBLER IS AVAILABLE AT FTP.FUNET.FI IN /PUB/CBM/PROGRAMMING.
  1765.  
  1766. ╞IRST THE RASTER DEMO FOR THE ╓╔├-20.  ╬OTE THAT ON THE ╓╔├-20, THE
  1767. $9004 REGISTER CONTAINS THE UPPER 8 BITS OF THE RASTER COUNTER.  ╙O,
  1768. THIS REGISTER CHANGES ONLY ON EVERY SECOND LINE.  ╔ HAVE TESTED THE
  1769. PROGRAM ON MY 6561-101-BASED ╓╔├-20, BUT NOT ON AN ╬╘╙├-═ SYSTEM.
  1770.  
  1771. ╔T WAS HARD TO GET IN CONTACT WITH ╬╘╙├-═ ╓╔├-20 OWNERS.  ─ANIEL
  1772. ─ALLMANN, WHO HAS A ╬╘╙├-═ ╓╔├-20, ALTHOUGH HE LIVES IN ╟ERMANY, RAN
  1773. MY TEST TO DETERMINE THE AMOUNT OF CYCLES PER LINE AND LINES PER FRAME
  1774. ON THE 6560-101.  ╒NFORTUNATELY, THE SECOND ╓╔┴ OF HIS ╓╔├-20 IS
  1775. PARTIALLY BROKEN, AND BECAUSE OF THIS, THIS PROGRAM DID NOT WORK ON
  1776. HIS COMPUTER.  ├RAIG ┬RUCE RAN THE PROGRAM ONCE, AND HE REPORTED THAT
  1777. IT ALMOST WORKED.  ╔ CORRECTED A LITTLE BUG IN THE CODE, SO THAT NOW
  1778. THE DISPLAY SHOULD BE STABLE ON AN ╬╘╙├-═ SYSTEM, TOO.  ┬UT THE ACTUAL
  1779. RASTER EFFECT, SIX 16*16-PIXEL BOXES CENTERED AT THE TOP BORDER, ARE
  1780. VERY LIKELY TO BE OFF THEIR POSITION.
  1781.  
  1782.  
  1783.   PROCESSOR 6502
  1784.  
  1785. ╬╘╙├    = 1
  1786. ╨┴╠     = 2
  1787.  
  1788. ;╙┘╙╘┼═ = ╬╘╙├  ; 6560-101: 65 CYCLES PER RASTER LINE, 261 LINES
  1789. ╙┘╙╘┼═  = ╨┴╠   ; 6561-101: 71 CYCLES PER RASTER LINE, 312 LINES
  1790.  
  1791. #IF ╙┘╙╘┼═ & ╨┴╠
  1792. ╠╔╬┼╙ = 312
  1793. ├┘├╠┼╙_╨┼╥_╠╔╬┼ = 71
  1794. #ENDIF
  1795. #IF ╙┘╙╘┼═ & ╬╘╙├
  1796. ╠╔╬┼╙ = 261
  1797. ├┘├╠┼╙_╨┼╥_╠╔╬┼ = 65
  1798. #ENDIF
  1799. ╘╔═┼╥_╓┴╠╒┼ = ╠╔╬┼╙ * ├┘├╠┼╙_╨┼╥_╠╔╬┼ - 2
  1800.  
  1801.   .ORG $1001    ; FOR THE UNEXPANDED ╓IC-20
  1802.  
  1803. ; ╘HE ┬┴╙╔├ LINE
  1804.  
  1805. BASIC:
  1806.   .WORD 0$      ; LINK TO NEXT LINE
  1807.   .WORD 1995    ; LINE NUMBER
  1808.   .BYTE $9┼     ; ╙┘╙ TOKEN
  1809.  
  1810. ; ╙┘╙ DIGITS
  1811.  
  1812.   .IF (* + 8) / 10000
  1813.   .BYTE $30 + (* + 8) / 10000
  1814.   .ENDIF
  1815.   .IF (* + 7) / 1000
  1816.   .BYTE $30 + (* + 7) % 10000 / 1000
  1817.   .ENDIF
  1818.   .IF (* + 6) / 100
  1819.   .BYTE $30 + (* + 6) % 1000 / 100
  1820.   .ENDIF
  1821.   .IF (* + 5) / 10
  1822.   .BYTE $30 + (* + 5) % 100 / 10
  1823.   .ENDIF
  1824.   .BYTE $30 + (* + 4) % 10
  1825. 0$:
  1826.   .BYTE 0,0,0   ; END OF ┬┴╙╔├ PROGRAM
  1827.  
  1828. START:
  1829.   LDA #$7F
  1830.   STA $912E     ; DISABLE AND ACKNOWLEDGE INTERRUPTS
  1831.   STA $912D
  1832.   STA $911E     ; DISABLE ╬═╔S (╥ESTORE KEY)
  1833.  
  1834. ;SYNCHRONIZE WITH THE SCREEN
  1835. SYNC:
  1836.   LDX #28       ; WAIT FOR THIS RASTER LINE (TIMES 2)
  1837. 0$:
  1838.   CPX $9004
  1839.   BNE 0$        ; AT THIS STAGE, THE INACCURACY IS 7 CLOCK CYCLES
  1840.                 ; THE PROCESSOR IS IN THIS PLACE 2 TO 9 CYCLES
  1841.                 ; AFTER $9004 HAS CHANGED
  1842.   LDY #9
  1843.   BIT $24
  1844. 1$:
  1845.   LDX $9004
  1846.   TXA
  1847.   BIT $24
  1848. #IF ╙┘╙╘┼═ & ╨┴╠
  1849.   LDX #24
  1850. #ENDIF
  1851. #IF ╙┘╙╘┼═ & ╬╘╙├
  1852.   BIT $24
  1853.   LDX #21
  1854. #ENDIF
  1855.   DEX
  1856.   BNE *-1       ; FIRST SPEND SOME TIME (SO THAT THE WHOLE
  1857.   CMP $9004     ; LOOP WILL BE 2 RASTER LINES)
  1858.   BCS *+2       ; SAVE ONE CYCLE IF $9004 CHANGED TOO LATE
  1859.   DEY
  1860.   BNE 1$
  1861.                 ; NOW IT IS FULLY SYNCHRONIZED
  1862.                 ; 6 CYCLES HAVE PASSED SINCE LAST $9004 CHANGE
  1863.                 ; AND WE ARE ON LINE 2(28+9)=74
  1864.  
  1865. ;INITIALIZE THE TIMERS
  1866. TIMERS:
  1867.   LDA #$40      ; ENABLE ╘IMER ┴ FREE RUN OF BOTH ╓╔┴S
  1868.   STA $911B
  1869.   STA $912B
  1870.  
  1871.   LDA #<╘╔═┼╥_╓┴╠╒┼
  1872.   LDX #>╘╔═┼╥_╓┴╠╒┼
  1873.   STA $9116     ; LOAD THE TIMER LOW BYTE LATCHES
  1874.   STA $9126
  1875.  
  1876. #IF ╙┘╙╘┼═ & ╨┴╠
  1877.   LDY #7        ; MAKE A LITTLE DELAY TO GET THE RASTER EFFECT TO THE
  1878.   DEY           ; RIGHT PLACE
  1879.   BNE *-1
  1880.   NOP
  1881.   NOP
  1882. #ENDIF
  1883. #IF ╙┘╙╘┼═ & ╬╘╙├
  1884.   LDY #6
  1885.   DEY
  1886.   BNE *-1
  1887.   BIT $24
  1888. #ENDIF
  1889.  
  1890.   STX $9125     ; START THE ╔╥╤ TIMER ┴
  1891.                 ; 6560-101: 65 CYCLES FROM $9004 CHANGE
  1892.                 ; 6561-101: 77 CYCLES FROM $9004 CHANGE
  1893.   LDY #10       ; SPEND SOME TIME (1+5*9+4=55 CYCLES)
  1894.   DEY           ; BEFORE STARTING THE REFERENCE TIMER
  1895.   BNE *-1
  1896.   STX $9115     ; START THE REFERENCE TIMER
  1897.  
  1898. POINTERS:
  1899.   LDA #<IRQ     ; SET THE RASTER ╔╥╤ ROUTINE POINTER
  1900.   STA $314
  1901.   LDA #>IRQ
  1902.   STA $315
  1903.   LDA #$C0
  1904.   STA $912E     ; ENABLE ╘IMER ┴ UNDERFLOW INTERRUPTS
  1905.   RTS           ; RETURN
  1906.  
  1907. IRQ:
  1908. ; IRQ (EVENT)   ; > 7 + AT LEAST 2 CYCLES OF LAST INSTRUCTION (9 TO 16 TOTAL)
  1909. ; PHA           ; 3
  1910. ; TXA           ; 2
  1911. ; PHA           ; 3
  1912. ; TYA           ; 2
  1913. ; PHA           ; 3
  1914. ; TSX           ; 2
  1915. ; LDA $0104,X   ; 4
  1916. ; AND #XX       ; 2
  1917. ; BEQ           ; 3
  1918. ; JMP ($314)    ; 5
  1919.                 ; ---
  1920.                 ; 38 TO 45 CYCLES DELAY AT THIS STAGE
  1921.  
  1922.   LDA $9114     ; GET THE ╬═╔ TIMER ┴ VALUE
  1923.                 ; (42 TO 49 CYCLES DELAY AT THIS STAGE)
  1924. ; STA $1E00     ; UNCOMMENT THESE IF YOU WANT TO MONITOR
  1925. ; LDY $9115     ; THE REFERENCE TIMER ON THE SCREEN
  1926. ; STY $1E01
  1927.   CMP #8        ; ARE WE MORE THAN 7 CYCLES AHEAD OF TIME?
  1928.   BCC 0$
  1929.   PHA           ; YES, SPEND 8 EXTRA CYCLES
  1930.   PLA
  1931.   AND #7        ; AND RESET THE HIGH BIT
  1932. 0$:
  1933.   CMP #4
  1934.   BCC 1$
  1935.   BIT $24       ; WASTE 4 CYCLES
  1936.   AND #3
  1937. 1$:
  1938.   CMP #2        ; SPEND THE REST OF THE CYCLES
  1939.   BCS *+2
  1940.   BCS *+2
  1941.   LSR
  1942.   BCS *+2       ; NOW IT HAS TAKEN 82 CYCLES FROM THE BEGINNING OF THE ╔╥╤
  1943.  
  1944. EFFECT:
  1945.   LDY #16       ; PERFORM AMAZING VIDEO EFFECT
  1946.   LDA $900F
  1947.   TAX
  1948.   EOR #$F7
  1949. 0$:
  1950.   STA $900F
  1951.   STX $900F
  1952.   STA $900F
  1953.   STX $900F
  1954.   STA $900F
  1955.   STX $900F
  1956.   STA $900F
  1957.   STX $900F
  1958.   STA $900F
  1959.   STX $900F
  1960.   STA $900F
  1961.   STX $900F
  1962.   PHA
  1963.   PLA
  1964. #IF ╙┘╙╘┼═ & ╨┴╠
  1965.   PHA
  1966.   PLA
  1967.   NOP
  1968. #ENDIF
  1969. #IF ╙┘╙╘┼═ & ╬╘╙├
  1970.   BIT $24
  1971. #ENDIF
  1972.   NOP
  1973.   DEY
  1974.   BNE 0$        ; END OF AMAZING VIDEO EFFECT
  1975.  
  1976.   JMP $EABF     ; RETURN TO NORMAL ╔╥╤
  1977.  
  1978.  
  1979. ┴ND AFTER YOU HAVE RECOVERED FROM THE SCHOCK OF SEEING A ╓╔├-20
  1980. PROGRAM, HERE IS AN EXAMPLE FOR THE ├64.  ╔T DOES ALSO SOMETHING
  1981. NOTEWORTHY; IT REMOVES THE SIDE BORDERS ON A NORMAL SCREEN WHILE
  1982. DISPLAYING ALL EIGHT SPRITES.  ╫ELL, IT CANNOT REMOVE THE BORDERS ON
  1983. BAD LINES, AND THE BAD LINES LOOK PRETTY BAD.  ┬UT ╔ COULD USE THE
  1984. PROGRAM FOR WHAT ╔ WANTED: ╔ MEASURED THE SPRITE DISTORTIONS ON ALL
  1985. VIDEOCHIP TYPES ╔ HAD AT HAND.  (╞┘╔: THE SPRITES 0-2 GET DISTORTED AT
  1986. THE VERY RIGHT OF THE SCREEN, AND THE SPRITES 6 AND 7 ARE INVISIBLE AT
  1987. THE VERY LEFT OF THE SCREEN.  ┘OU WILL NEED A MONITOR WITH HORIZONTAL
  1988. SIZE CONTROLS TO WITNESS THESE EFFECTS.)
  1989.  
  1990. ╘HIS PROGRAM IS REALLY ROBUST, IT INSTALLS ITSELF NICELY TO THE
  1991. INTERRUPT ROUTINE CHAIN.  ╔T EVEN HAS AN ENTRY POINT FOR DEINSTALLING
  1992. ITSELF.  ┬UT IN ITS ROBUSTNESS IT USES SELF-MODIFYING CODE TO STORE
  1993. THE ORIGINAL INTERRUPT ROUTINE ADDRESS. :-)
  1994.  
  1995. ╘HE CODE ALSO RELIES ON THE PAGE BOUNDARIES IN BEING WHERE THEY ARE.
  1996. ╘HE CYCLES ARE COUNTED SO THAT THE BRANCHES "IRQLOOP" MUST TAKE 4
  1997. CYCLES.  ╔F THE "IRQLOOP" COMES TO THE SAME ├╨╒ PAGE WITH THE BRANCH
  1998. INSTRUCTIONS, YOU MUST ADD ONE CYCLE TO THE LOOP IN A WAY OR ANOTHER.
  1999. ╫HEN CODING THE ROUTINE, ╔ NOTICED AGAIN HOW STUPID ASSEMBLY CODING
  2000. CAN BE, ESPECIALLY CONDITIONAL ASSEMBLING.  ╔N A MACHINE LANGUAGE
  2001. MONITOR YOU HAVE FAR BETTER CONTROL ON PAGE BOUNDARIES.  ┬╘╫, YOU
  2002. MIGHT WONDER WHY ╔ DISABLE THE ╥ESTORE KEY IN A SUBROUTINE AT THE END
  2003. AND NOT IN THE BEGINNING OF THE PROGRAM.  ╫ELL, THE ROUTINE WAS SO
  2004. LONG THAT IT WOULD HAVE AFFECTED THE "IRQLOOP" PAGE BOUNDARIES.  ┴ND ╔
  2005. DIDN'T WANT TO RISK THE MODIFIED PROGRAMS WORKING ON ALL THREE
  2006. DIFFERENT VIDEOCHIP TYPES ON THE FIRST TRY.
  2007.  
  2008.  
  2009.